2014-11-06 108 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>