在 ScrollViewer child 的 Frame 中禁用滚动,该 Frame 的 ScrollViewer 为 parent
Disable scrolling in ScrollViewer child of a Frame which has a ScrollViewer as parent
州
我有一个 Page
(Page_Child
) 和一个 ScrollViewer
(ScrollViewer_Child
) 在 Frame
(Frame_Parent
) 这是我的 parent ScrollViewer
(ScrollViewer_Parent
).
的 child
<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>
问题
我试图实现的是禁用 Frame
中的 ScrollViewer
因为 parent ScrollViewer
可以处理所有占用,这要归功于高度不固定的 Frame
。 - 或者至少让 parent 在 child 到达顶部或底部时继续滚动。
遗憾的是我不能使用任何外部资源或库,我也不能删除 child ScrollViewer
因为它在我的应用程序的其他地方可视化。
问题
有没有办法告诉框架内容禁用滚动或如何存档继续滚动框架?
如果您能够使用外部库,您可以使用此处的行为:BubbleScrollEvent Behaviour,但如果您不能,您可以简单地在后面的代码中编写类似的东西;
通过将方法附加到 Frame
的 PreviewMouseWheel
事件,这会将事件路由到 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
附加到 StackPanel
。
州
我有一个 Page
(Page_Child
) 和一个 ScrollViewer
(ScrollViewer_Child
) 在 Frame
(Frame_Parent
) 这是我的 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>
问题
我试图实现的是禁用 Frame
中的 ScrollViewer
因为 parent ScrollViewer
可以处理所有占用,这要归功于高度不固定的 Frame
。 - 或者至少让 parent 在 child 到达顶部或底部时继续滚动。
遗憾的是我不能使用任何外部资源或库,我也不能删除 child ScrollViewer
因为它在我的应用程序的其他地方可视化。
问题
有没有办法告诉框架内容禁用滚动或如何存档继续滚动框架?
如果您能够使用外部库,您可以使用此处的行为:BubbleScrollEvent Behaviour,但如果您不能,您可以简单地在后面的代码中编写类似的东西;
通过将方法附加到 Frame
的 PreviewMouseWheel
事件,这会将事件路由到 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
附加到 StackPanel
。