冒泡/重定向事件到父 ScrollViewer

Bubbling up / redirect event to parent ScrollViewer

我希望有人 hint/solution 可以更好、更高效地解决这个问题。

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

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

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

有人知道如何将 MouseWheel 事件冒泡 up/redirect 到父 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);
}

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

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

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

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