2014-11-06 107 views
1

我们正在WPF中开发一个触摸应用程序。 我们的ScrollViewers将属性PanningMode设置为Both以启用滑动滚动。 在空白区域甚至在CheckBox和ComboBox控件中滑动时,此工作正常。在WPF中的Textbox控件上启用滑动滚动滚动查看器

但是,当在文本框上滑动(在文本框上简单地按住手指并向上或向下移动)时,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> 

回答

3

我已经成功地解决了这个问题。 TextBox控件不滑动滚动的原因是因为它们的控件模板还包含一个将PanningMode设置为VerticalFirst的ScrollViewer。 VerticalFirst允许在水平滑动时选择文本框文本(请参阅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&#x0a;test 2&#x0a;test 2&#x0a;test 2&#x0a;test 2&#x0a;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&#x0a;test 2&#x0a;test 2&#x0a;test 2&#x0a;test 2&#x0a;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>