2017-04-24 1 views
1

나는이 문제를보다 훌륭하고 효율적으로 해결할 수있는 힌트/해결책을 얻길 바랍니다.부모에게 위로/리다이렉트 이벤트를 버블 링하기 ScrollViewer

Windows UWP 앱에 그리드가있는 ScrollViewer가 포함되어 있습니다. 이 표에는 ScrollViewer에 두 개의 StackPanels가 임베드되어 있습니다.

각 StackPanel에는 세로 방향으로 이미지 목록이 있습니다. StackPanel은 모든 이미지가 함께 모이기 때문에 높이가 있으므로 수직 스크롤바가 없어야합니다. 한편 이미지가 넓어지고 StackPanel이 표시되고 가로 스크롤 막대가 표시됩니다. StackPanels를 마우스로 가로 방향으로 스크롤 할 수 있습니다. 이것은 완벽하게 작동합니다.

그러나 StackPanel에서 마우스를 사용하면 마우스 휠로 세로 방향으로 스크롤 할 수 없습니다. StackPanels 주위의 ScrollViewer는 MouseWheel 이벤트를 소비하고 상위 ScrollViewer까지 버블 링하지 않습니다.

누군가 내가 부모 스크롤 버튼으로 MouseWheel 이벤트를 버블 링하거나 리디렉션 할 수있는 방법을 알고 있습니까?

나는 이것을 위해 아주 좋은 해결책을 찾지 못했습니다. 나는 자신의 UIElement.PointerWheelChangedEvent 핸들러를 추가하고 다음과 같이 내 자신에 외부에서 ScrollViewer를 이동했습니다이 작동하지만 빠르고 유체 방법으로

LeftScrollViewer.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnVerticalScrollEventHandled), true); 

private void OnVerticalScrollEventHandled(object sender, PointerRoutedEventArgs e) 
{ 
    ScrollViewPages.ChangeView(ScrollViewPages.HorizontalOffset, ScrollViewPages.VerticalOffset + (-1 * e.GetCurrentPoint(null).Properties.MouseWheelDelta), 1); 
} 

. 누군가에게 더 나은 해결책이 있습니까?

+0

'ScrollViewer'의 빈 영역 위로 마우스를 가져 가면 스크롤되지 않습니까? 이미지 위로 마우스를 가져 가면 스크롤됩니까? – Laith

+0

다른 방법은 없습니다. ScrollViewer의 빈 영역 위에 있으면 스크롤됩니다. 이미지 위에 있으면 스크롤하지 않습니다. – StefanH

+0

설정을 시도하십시오. e.Handled = false; 부모 스크롤하려는 경우. – Hannes

답변

0

자식에서 부모로 이벤트를 버블 링하려면 이벤트에 대한 자체 처리기를 추가하고 처리 된 속성을 false로 설정하십시오.

LeftScrollViewer.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnVerticalScrollEventHandled), true); 

private void OnVerticalScrollEventHandled(object sender, PointerRoutedEventArgs e) 
{ 
    e.Handled = false; 
} 
관련 문제