【发布时间】:2016-01-14 14:24:07
【问题描述】:
使用以下 XAML:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="600" Width="640">
<ScrollViewer PanningMode="Both">
<StackPanel>
<TextBlock TextWrapping="Wrap">LOTS OF TEXT...</TextBlock>
<DataGrid MinHeight="200">
<DataGrid.Columns>
<DataGridTextColumn Width="100"></DataGridTextColumn>
<DataGridTextColumn Width="100"></DataGridTextColumn>
<DataGridTextColumn Width="100"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<TextBlock TextWrapping="Wrap">LOTS OF TEXT...</TextBlock>
</StackPanel>
</ScrollViewer>
</Window>
您可以通过触摸TextBlocks 进行滚动。但是,如果您触摸DataGrid 并尝试滚动,它什么也不做。
我猜这与 DataGrid 中的内容本身可能是可滚动的这一事实有关,因此 WPF 与潜在的嵌套滚动条混淆了。
所需的行为是触摸DataGrid 将首先滚动DataGrid 中的内容(如有必要)。然后,当DataGrid 中的内容完全滚动时,主窗口将滚动。
【问题讨论】:
-
DataGrid内部有ScrollViewer,它自己捕获所有滚动事件。您将不得不冒泡相应的事件,请参阅以了解如何为MouseWheel和ListViewhere 完成它。 -
谢谢@Sinatr。该代码确实适用于
PreviewMouseWheel。然而,奇怪的是,它似乎不适用于触摸事件。我为PreviewTouchDown、PreviewTouchMove和PreviewTouchUp做了类似的事情,而顶层ScrollViewer仍然没有滚动。 -
实际上,如果您只是在两个滚动查看器上为 hittestvisibility 打一个 Background=Transparent,它应该会自动滚动链接。我从来不需要在任何地方实际冒泡任何东西,而且在新的东西中它变得更加容易,你可以通过属性切换滚动链。
标签: c# wpf xaml datagrid touch