如何在Windows Phone 7上实现滑动操作

21

我想在Windows Phone 7上滑动图片,从哪里开始?


“Swipe” 图片是什么意思? - Chris Pitman
我所指的“swipe”手势是一种触摸并拖动,然后松开以翻转页面的手势。 - Shaireen
3个回答

41

你可以在Windows Phone 7的Silverlight控制工具包中使用GestureService。在你的UI元素中,添加以下代码(在你已经将工具包的DLL引用到你的WP7项目后) -

<toolkit:GestureService.GestureListener>
    <toolkit:GestureListener Flick="OnFlick"/>
</toolkit:GestureService.GestureListener>  

在代码后台文件中实现OnFlick处理程序,如下所示 -

private void OnFlick(object sender, FlickGestureEventArgs e)
{
   var vm = DataContext as SelectedCatalogViewModel;
   if (vm != null)
   {
      // User flicked towards left
      if (e.HorizontalVelocity < 0)
      {
         // Load the next image 
         LoadNextPage(null);
      }

      // User flicked towards right
      if (e.HorizontalVelocity > 0)
      {
         // Load the previous image
         LoadPreviousPage();
      }
   }
}

希望这可以帮到你,indyfromoz


"var vm = DataContext as SelectedCatalogViewModel;" 的意思是什么? - Shaireen
1
需要实现滑动手势的页面已绑定到一个 ViewModel 上。ViewModel 类是 SelectedCatalogViewModel,我正在使用 MVVMLight(MVVM 工具包)中的 RelayCommand 将代码后台的事件与底层 ViewModel 关联起来。对于混淆造成的困扰,深感抱歉。祝好,indyfromoz。 - indyfromoz
2
您可能还想确保水平速度比垂直速度更大(甚至是一个数量级),这样对角线或主要垂直的滑动操作不会触发“LoadNextPage”和“LoadPreviousPage”方法。 - pho79
2
@pho79: 或者检查 (e.Direction == System.Windows.Controls.Orientation.Horizontal) - giacoder
1
这是你在XAML中需要的部分:xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" - swinefeaster
当用户在横屏模式下向左轻扫时,它不会触发。 - TaLha Khan

7

但就文件所说...XNA框架是为游戏开发而设计的..不是吗? - Shaireen
是的,但XNA框架适用于WP7游戏开发,因此您可以很好地引用框架的手势部分来进行普通应用程序开发。这意味着您不必依赖第三方库。 - Phill

5

试试这个:

using Microsoft.Phone.Controls;

public partial class MyControl
{
    public MyControl()
    {
        InitializeComponent();

        var gl = GestureService.GetGestureListener(asd);
        gl.Flick += new EventHandler<FlickGestureEventArgs>(GestureListener_Flick);
    }

    private void GestureListener_Flick(object sender, FlickGestureEventArgs e)
    {
        if (e.Direction == Orientation.Horizontal)
        {
            if (e.HorizontalVelocity < 0) // determine direction (Right > 0)
            {
                //Some Action
            }
            else
            {
                //Some Action
            }
        }
    }
}

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