Bru*_*o V 3 c# wpf scrollviewer touch
我们正在 WPF 中开发触摸应用程序。我们的 ScrollViewers 将属性 PanningMode 设置为 Both 以启用滑动滚动。当在空白区域甚至在 CheckBox 和 ComboBox 控件上滑动时,此功能效果很好。
但是,当在文本框上滑动(将手指短暂地放在文本框上并向上或向下移动)时,ScrollViewer 不会滚动。有没有办法在所有控件上启用滑动滚动并仅将它们集中在点击上?
可以使用以下代码重现此行为:
<Window x:Class="WpfSandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ScrollViewer PanningMode="Both">
<StackPanel>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<TextBox Margin="5"></TextBox>
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
</StackPanel>
</ScrollViewer>
</Window>
Run Code Online (Sandbox Code Playgroud)
我已经成功解决了这个问题。TextBox 控件不进行滑动滚动的原因是它们的控件模板还包含一个 ScrollViewer,其 PanningMode 设置为 VerticalFirst。VerticalFirst 允许在水平滑动时选择 TextBox 文本(请参阅MSDN PanningMode)。
仅当将 TextBox ScrollViewer.PanningMode 设置为 None 时,才会保持此控件上的滑动滚动(这会禁用选择)。这是 CheckBox 和 ComboBox 控件的默认行为,因为它们的 ControlTemplate 中不包含 ScrollViewer。
我修改了示例以显示此行为:
<Window x:Class="WpfSandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<ScrollViewer PanningMode="Both">
<StackPanel>
<TextBox Margin="5" ScrollViewer.PanningMode="Both">Panningmode both</TextBox>
<TextBox Margin="5" ScrollViewer.PanningMode="HorizontalFirst">Panningmode HorizontalFirst</TextBox>
<TextBox Margin="5" ScrollViewer.PanningMode="HorizontalOnly">Panningmode HorizontalOnly</TextBox>
<!-- Allows swipe scrolling -->
<TextBox Margin="5" ScrollViewer.PanningMode="None">Panningmode None</TextBox>
<TextBox Margin="5" ScrollViewer.PanningMode="VerticalFirst">Panningmode VerticalFirst</TextBox>
<TextBox Margin="5" ScrollViewer.PanningMode="VerticalOnly">Panningmode VerticalOnly</TextBox>
<TextBox Margin="5" ScrollViewer.PanningMode="Both" Height="60" xml:space="preserve" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" >Panning set to both
test 2
test 2
test 2
test 2
test 2</TextBox>
<!-- Allows swipe scrolling -->
<TextBox Margin="5" ScrollViewer.PanningMode="None" Height="60" xml:space="preserve" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" >Panning set to none
test 2
test 2
test 2
test 2
test 2</TextBox>
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<CheckBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
<ComboBox Margin="5" />
</StackPanel>
</ScrollViewer>
</Window>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |