禁止在以ScrollViewer作为父级的Frame的ScrollViewer子级中滚动

时间:2019-05-23 07:51:18

标签: c# wpf .net-4.0 frame scrollviewer

状态

我有一个PagePage_Child)中有一个ScrollViewerScrollViewer_Child)和一个孩子的FrameFrame_Parent)我的父母ScrollViewerScrollViewer_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,因为它在我的应用程序中的其他位置可见。

问题

是否有一种方法告诉框架内容禁用滚动,或者如何存档在框架中继续滚动?

1 个答案:

答案 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