c# - 在 WPF 滚动查看器中的文本框控件上启用滑动滚动

标签 c# wpf touch scrollviewer

我们正在 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>

最佳答案

我已经设法解决了这个问题。 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&#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>

关于c# - 在 WPF 滚动查看器中的文本框控件上启用滑动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781833/

相关文章:

ios - 如何在 Swift 中触摸并按住一个节点?

c# - 玩家相机瞄准/锁定另一个物体

C#.Net 邮件将进入垃圾邮件文件夹

c# - RenderTransform 后更新边距

JQuery、Kinetic.js 和 MSPointer 事件(如何 addEventListener,或者 on() 会起作用吗?)

javascript - 移动浏览器 - 如何删除拖动到水平滚动

c# - 函数变量调用自身

c# - 用户在网站中触发一个漫长的过程

c# - 在 XAML 中使用静态函数绑定(bind)

c# - 使用 WPF 在虚拟化 TreeView 中选择一个节点