【问题标题】:Enable swipe scrolling on Textbox control in WPF Scrollviewer在 WPF Scrollviewer 中的 Textbox 控件上启用滑动滚动
【发布时间】:2014-11-06 14:25:04
【问题描述】:

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

但是,当在 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>

【问题讨论】:

    标签: c# wpf touch scrollviewer


    【解决方案1】:

    我已经设法解决了这个问题。 TextBox 控件不滑动滚动的原因是它们的控件模板还包含一个将 PanningMode 设置为 VerticalFirst 的 ScrollViewer。 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&#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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多