C# 冒泡/重定向事件到父ScrollViewer

C# 冒泡/重定向事件到父ScrollViewer,c#,events,uwp,scrollviewer,event-bubbling,C#,Events,Uwp,Scrollviewer,Event Bubbling,我希望有人能给出一个提示/解决方案,以更好、更有效的方式解决这个问题 我正在编写一个Windows UWP应用程序,其中包含一个带有网格的ScrollViewer。在这个网格中,我在ScrollViewer中嵌入了两个StackPanel 每个StackPanel都有一个垂直方向的图像列表。StackPanel的高度与所有图像的高度相同,因此没有应有的垂直滚动条。 另一方面,图像比StackPanel和水平滚动条更宽。我可以用鼠标在水平方向上滚动StackPanel。这很好用 但是如果我用鼠标在

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

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

每个StackPanel都有一个垂直方向的图像列表。StackPanel的高度与所有图像的高度相同,因此没有应有的垂直滚动条。 另一方面,图像比StackPanel和水平滚动条更宽。我可以用鼠标在水平方向上滚动StackPanel。这很好用

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

有人知道如何将鼠标滚轮事件弹出/重定向到父ScrollViewer吗

我找到了一个不太好的解决办法。我添加了自己的UIElement.PointerHeelChangedEvent处理程序,并自行移动外部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);
}

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

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

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

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

您是说当您将鼠标悬停在
ScrollViewer
中的空白区域上时,它不会滚动?当你将鼠标悬停在一个图像上时,它会滚动吗。如果我在ScrollViewer中的空白区域上,它会滚动。如果我在图像上,它不会滚动。尝试设置e.Handled=false;如果你想让家长滚动。非常感谢汉内斯。这很好用。我会补充一个答案。