我在尝试解决一个问题,即如何滚动位于滚动查看器内部的网格内容。当使用鼠标滚轮或触摸屏幕进行平移时,如果鼠标/触摸点位于空白区域上方,则网格可以正常滚动,但如果它位于某些控件上方(例如分组框),则无法滚动。是否有一些属性我错过了,以允许子面板滚动其父容器?
编辑: 我最初的布局描述有误。以下是我的情况的简化版本:
一位同事指出我的问题是由于像ListBoxes和DataGrids这样的控件本身包含ScrollViewers,这是有道理的。他的建议(虽然可行,但我们都认为比应该复杂)是在代码后台捕捉并重新抛出滚动事件(可能还要处理计算偏移量以滚动),以便它可以冒泡到“MainScrollViewer”中。
编辑2: 看起来实现这个唯一的方法是使用代码后台来处理父级中的PreviewMouseWheel事件。这可以解决问题,但我该如何为平移(在触摸屏上滚动)实现相同的功能呢?
编辑: 我最初的布局描述有误。以下是我的情况的简化版本:
<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
吗?没有必要将其放在ScrollViewer
中...如果你安装了VS2013,你可以在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\SystemThemes\Wpf找到用于每个控件的模板。 - Tony VitabileBackground
。一个Transparent
的背景应该可以很好地进行命中测试。唯一的例外是当你处于一个具有零 Alpha 值背景的分层窗口中时,WPF 将无法接收输入事件。 - Mike Strobel