有没有办法在WPF ScrollViewer中触摸滚动?

我正在尝试在WPF应用程序中创build一个表单,该表单允许用户使用类似iPhone的手势来滚动可用的字段。 所以,我把所有的表单控件都放到了一个ScrollViewer的StackPanel里面,当屏幕上显示的元素过多时,滚动条就会出现。

但是,当我尝试在支持触摸的设备上进行testing时,平移手势(将手指放在表面上并向上拖动)不会像我所期望的那样移动可视区域。

当我简单地在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> 

你应该使用附加的属性:

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

在ScrollViewer默认样式中,PanningMode默认为None,但将其设置为其他值将启用触摸滚动。 我目前正在调查在我的应用程序中使用这个function,我正在寻找一个很好的减速度和比值…我可能只需要testing它们,以find一些运作良好的东西。

如果您使用的是.NET 4.0,那么最近微软团队发布了一个很酷的东西! 他们将所有这些漂亮的Surface控件移植到Win7。 SurfaceScrollViewer像iphone一样非常酷。 安装此工具包并从VS2010项目模板http://www.microsoft.com/en-us/download/details.aspx?id=26716启动SurfaceWin7Touch项目;