我有一个Page
(Page_Child
)中有一个ScrollViewer
(ScrollViewer_Child
)和一个孩子的Frame
(Frame_Parent
)我的父母ScrollViewer
(ScrollViewer_Parent
)的人。
<ScrollViewer Name="ScrollViewer_Parent">
<StackPanel>
<Frame Name="Frame_Parent">
<Frame.Content>
<Page Name="Page_Child">
<ScrollViewer Name="ScrollViewer_Child">
<!-- Page Content -->
</ScrollViewer>
</Page>
</Frame.Content>
</Frame>
<!-- ... -->
</StackPanel>
</ScrollViewer>
我试图实现的是禁用ScrollViewer
中的Frame
,因为ScrollViewer
的高度不固定,因此父Frame
可以处理所有捕获}。 -或者至少让父母在孩子到达顶部或底部时继续滚动。
可悲的是,我无法使用任何外部资源或库,也无法删除子ScrollViewer
,因为它在我的应用程序中的其他位置可见。
是否有一种方法告诉框架内容禁用滚动,或者如何存档在框架中继续滚动?
答案 0 :(得分:1)
如果您可以使用外部库,则可以在此处使用以下行为:BubbleScrollEvent Behaviour,但是由于您不能只写类似的东西,而需要在后面的代码中进行操作;
通过将方法附加到PreviewMouseWheel
的{{1}}事件,将事件路由到Frame
,如下所示:
ScrollViewer
编辑:刚刚意识到,它将把事件引发到<ScrollViewer Name="ScrollViewer_Parent">
<StackPanel PreviewMouseWheel="BubblePreviewMouseWheel">
<Frame Name="Frame_Parent" PreviewMouseWheel="BubblePreviewMouseWheel" />
...
</StackPanel>
</ScrollViewer>
private void BubblePreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
var e2 = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
e2.RoutedEvent = UIElement.MouseWheelEvent;
((UIElement)sender).RaiseEvent(e2);
}
,因此您还需要将StackPanel
附加到BubblePreviewMouseWheel
。