在Windows应用商店应用中将两个手势分开执行

时间:2014-01-10 00:54:42

标签: c# .net windows-runtime winrt-xaml windows-8.1

我在Windows 8.1商店应用程序中的手势操作存在一个真正的问题,我正在构建一个我正在实现两个手势的应用程序:

  1. 捏缩放。
  2. 滑动。
  3. 对于捏缩放我使用ManipulationStarted - > ManipulationDelta - >在ManipulationCompleted
    对于滑动,我使用PointerPressed - > PointerMoved - > PointerReleased

    问题是,当ManipulationStarted尝试进行PinchToZoom操作时会触发,PointerPressed事件也会触发!并且还要执行其他手势!

    我可以找出将这些与手势分开的最佳方式,这样做的最佳做法是什么,我应该忽略一些有关手势机制的内容。

2 个答案:

答案 0 :(得分:3)

您可以使用 OnManipulationDelta 方法进行缩放和滑动。

<强> XAML

<Canvas >
  <Image  ManipulationMode='All'
          Source='Assets/grapes.png'
          Canvas.Top='79'
          Canvas.Left='107'>
    <Image.RenderTransform>
       <CompositeTransform  />
    </Image.RenderTransform>
  </Image>

  <Image  ManipulationMode='All'
          Source='Assets/grapesBW.png'
          Canvas.Top='79'
          Canvas.Left='461'>
    <Image.RenderTransform>
    <CompositeTransform />
   </Image.RenderTransform>
</Image>
<Rectangle Fill='#7FFFAAAB'
           Height='100'
           Canvas.Left='107'
           Stroke='Black'
           Canvas.Top='335'
           Width='300' />
<Rectangle Fill='#7F738D01'
           Height='100'
           Canvas.Left='461'
           Stroke='Black'
           Canvas.Top='335'
           Width='300' />
</Canvas>

<强>代码

// override the OnManipulationDelta method, instead of setting up event procedures

protected override void OnManipulationDelta(ManipulationDeltaRoutedEventArgs args)
{
    // All the Image elements have ManipulationMode = All enabled
    // The other elements on the page have manipulations disabled
    // therefore the OriginalSource can only be an image, no need to test for null

    var currentImage = args.OriginalSource as Image;
    var transform = currentImage.RenderTransform as CompositeTransform;

    transform.TranslateX += args.Delta.Translation.X;
    transform.TranslateY += args.Delta.Translation.Y;

    transform.ScaleX *= args.Delta.Scale;
    transform.ScaleY *= args.Delta.Scale;

    transform.Rotation += args.Delta.Rotation;

base.OnManipulationDelta(args);

}

答案 1 :(得分:2)

由于您没有提供代码,我猜测您是如何实施操作事件的。

如果您使用的是GestureRecognizer课程,它还可以使用拖动事件处理程序跟踪滑动。

GestureRecognizer知道用户当前正在表达什么类型的手势。