将事件冒泡/重定向到父ScrollViewer

时间:2017-04-24 09:27:38

标签: c# events uwp scrollviewer event-bubbling

我希望有人有一个提示/解决方案,以更好,更高效的方式解决这个问题。

我正在编写一个包含带网格的ScrollViewer的Windows UWP应用程序。在这个网格中,我在ScrollViewer中嵌入了两个StackPanel。

每个StackPanel都有一个垂直方向的图像列表。 StackPanel与所有图像在一起的高度一样,因此没有垂直滚动条。 另一方面,图像比StackPanel宽,并且显示水平滚动条。我可以用鼠标在水平方向上滚动StackPanels。这非常有效。

但是,如果我用鼠标在StackPanel上,我无法使用鼠标滚轮在垂直方向上滚动周围的ScrollViewer。 StackPanels周围的ScrollViewer将使用MouseWheel事件,并且不会将其冒泡到父ScrollViewer。

有人知道如何将MouseWheel事件冒泡/重定向到父ScrollViewer吗?

我发现了一个不太好的解决方法。我已经添加了一个自己的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);
}

这可行但不是快速而流畅的方式。有人有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

要将事件从子项冒泡到父项,请为事件添加自己的处理程序,并将handle属性设置为false。

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

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