【问题标题】:Bubbling up / redirect event to parent ScrollViewer冒泡/重定向事件到父 ScrollViewer
【发布时间】:2017-04-24 09:27:37
【问题描述】:

我希望有人有提示/解决方案以更好、更高效的方式解决此问题。

我正在编写一个 Windows UWP 应用程序,其中包含一个带有网格的 ScrollViewer。在这个网格中,我在 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);
}

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

【问题讨论】:

  • 您是说当您将鼠标悬停在ScrollViewer 的空白区域上时,它不会滚动?当您将鼠标悬停在图像上时它会滚动吗?
  • 不行。如果我在 ScrollViewer 中的空白区域上方,它会滚动。如果我在一个图像上它不会滚动。
  • 尝试设置 e.Handled = false;如果你想让父级滚动。
  • 非常感谢汉内斯。这完美地工作。我会为此添加一个答案。

标签: c# events uwp scrollviewer event-bubbling


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2010-12-07
    • 2015-09-30
    相关资源
    最近更新 更多