有没有一种方法可以在WPF ScrollViewer中启用触摸滚动?

51

我正在尝试在WPF应用程序中创建一个表单,以允许用户使用类似iPhone的手势来滚动浏览可用字段。因此,我将所有表单控件都放置在ScrollViewer内的StackPanel中,当屏幕上要显示的元素过多时,滚动条会按预期显示。

然而,当我尝试在我的支持触摸的设备上测试这一功能时,平移手势(在表面上放下一个手指并向上拖动)并没有像我期望的那样将可视区域向下移动。

当我只是将一些元素放在ListView内时,触摸手势可以正常工作。是否有任何方法在ScrollViewer中启用同样的行为?

我的窗口结构如下:

 <Window x:Class="TestTouchScrolling.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" Loaded="Window_Loaded">
<Grid>        
    <ScrollViewer Name="viewer" VerticalScrollBarVisibility="Auto">
        <StackPanel Name="panel">
            <StackPanel Orientation="Horizontal">
                <Label>Label 1:</Label>
                <TextBox Name="TextBox1"></TextBox>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <Label>Label 2:</Label>
                <TextBox Name="TextBox2"></TextBox>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <Label>Label 3:</Label>
                <TextBox Name="TextBox3"></TextBox>
            </StackPanel>

            <!-- Lots more like these -->

        </StackPanel>
    </ScrollViewer>
</Grid>

2个回答

78

您应该使用以下附加属性:

  • ScrollViewer.PanningMode
  • ScrollViewer.PanningDeceleration
  • ScrollViewer.PanningRatio

PanningMode在ScrollViewer默认样式中默认为None,但将其设置为其他值将启用触摸滚动。我目前正在调查如何在我的应用程序中使用此功能,并寻找一个良好的减速和比率值......我可能需要测试它们以找到适合的数值。


3
请注意,这些属性位于“杂项”选项卡下,并且在Silverlight中不可用,以防你有疑问。 - Dimitry K

10

如果您正在使用.NET 4.0,最近由Microsoft团队发布了一个很酷的东西!他们将那些漂亮的Surface控件移植到了Win7上。 SurfaceScrollViewer就像iPhone一样非常酷。安装这个工具包并从VS2010项目模板中开始一个SurfaceWin7Touch项目。 http://www.microsoft.com/en-us/download/details.aspx?id=26716


4
你好Jobi,上面的链接无法使用,请你提供一个有效的链接。谢谢! - Prabhakaran
1
链接已损坏。 - Davide Cannizzo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接