gpt4 book ai didi

WPF通过子容器滚动父容器

转载 作者:行者123 更新时间:2023-12-04 22:30:56 25 4
gpt4 key购买 nike

我在试图弄清楚如何滚动包含在滚动查看器中的网格内容时遇到了一些问题。当尝试使用鼠标滚轮或平移(使用触摸屏)滚动时,如果鼠标/触摸点位于空白区域上方,则网格会很好地滚动,但如果它位于某些控件(例如组框)上方,则不会滚动滚动。我是否缺少某些属性以允许子面板允许它们滚动其父容器?

编辑:
我错误地陈述了我的原始布局。这是我的 senario 的简化版本:

<Grid>
<ScrollViewer Name="MainScrollViewer">
<StackPanel>
<ListBox /> <--Doesn't Scroll-->
<Button /> <--Scrolls Fine-->
<TextBlock /> <--Scrolls Fine-->
<TextBox /> <--Scrolls Fine-->
<DataGrid /> <--Doesn't Scroll-->
</StackPanel>
</ScrollViewer>
</Grid>

一位同事指出我的问题是由于 ListBoxes 和 DataGrids 等控件本身包含 ScrollViewers,这是有道理的。他的建议(这可行,但我们都同意似乎比它应该的更复杂)是在后面的代码中捕获并重新抛出滚动事件(并且可能必须处理计算要滚动的偏移量),以便它可以冒泡到“MainScrollViewer”。

编辑 2:
似乎实现这一目标的唯一方法是使用背后的代码来处理父级中的 PreviewMouseWheel 事件。那行得通,但是我如何实现相同的平移操作(在触摸屏上用手指滚动)?

最佳答案

使用 ScrollViewer 的 PreviewMouseWheel 事件和 ScrollToVerticalOffset 方法...

private void ScrollViewerOnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
var scv = sender as ScrollViewer;
if (scv == null) return;
scv.ScrollToVerticalOffset(scv.VerticalOffset - e.Delta);
e.Handled = true;
}

关于WPF通过子容器滚动父容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com