사용자 정의 컨트롤을 패닝 할 때 스크롤링이 발생하지 않습니다. Panel에서 파생 된 사용자 정의 컨트롤을 가지고 있는데이 컨트롤을 ScrollViewer
안에 배치했습니다. 그리고 내 사용자 지정 컨트롤에 대해 ManipulationMode
을 "모두"로 설정했습니다. ManipulationDelta
을 실행하고 ScrollViewer
에서 ChangeView
메서드를 사용하여 VericalOffset
및 HorizontalOffSet
을 변경합니다. VerticalOffSet 및 HorizontalOffSet은 내 패닝을 기반으로 내 패널에 설정되지만보기에는 변경 사항이 없으므로 ScrollViewer
은 패널을 보유합니다.UWP에서 패닝 할 때 ScrollViewer가 하위 요소를 보유합니다.
나는 많은 방법을 피곤하지만 문제가 해결되지 않았습니다. ViewChanging
을 트리거하고 VerticalOffSet
및 HorizontalOffSet
을 설정하십시오. ScrollViewer
에 대해 ManipulationDelta
을 트리거하고 VerticalOffSet
및 HorizontalOffSet
을 설정합니다. ManipulationStaring
, ManipulationDelta
및 ManipulationCompleted
을 발생 시키면 CustomPanel 및 ScrollViewer
에 대해 VerticalOffSet
및 HorizontalOffSet
을 설정합니다.
<Grid>
<ScrollViewer x:Name="scrollViewer"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible"
HorizontalAlignment="Left"
VerticalAlignment="Top">
<local:CustomPanel x:Name="customPanel" Height="800" Width="900"
ManipulationMode="All"/>
</ScrollViewer>
</Grid>
private void OnContainerOnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
if (scrollViewer!= null)
{
if (scrollViewer.HorizontalScrollMode == ScrollMode.Disabled && scrollViewer.VerticalScrollMode == ScrollMode.Disabled)
return;
var verticalOffset = e.Delta.Translation.Y;
var horizontalOffset = e.Delta.Translation.X;
this.scrollViewer.ChangeView(null, VerticalOffset - verticalOffset, null, true);
this.scrollViewer.ChangeView(HorizontalOffset - horizontalOffset, null, null, true););
e.Handled = true;
}
}
참고 : 고정 행이 깜박 거림있는 ManipulationMode
을 설정하지 않고 스크롤하는 동안 내가 그렇게 단지 내가 ManipulationDelta
트리거, 우리의 사용자 정의 그리드 (CustomPanel)의 일부 고정 행을 가지고있다.
이 문제에 대한 제안이 있으십니까?
엘비스 - 당신의 제안을 주셔서 감사합니다, 나는 모바일 장치에서 내 옆에 당신의 제안을 확인하지만, 그 행위에서 난 것이 아니니있다. 내 요구 사항을 충족시킬 수있는 해결책이 있습니까? –
이 문제를 재현 할 수있는 기본 데모를 공유하고 싶습니다. 데모를 직접 수정하려고합니다. –