我在Windows 8.1商店应用程序中的手势操作存在一个真正的问题,我正在构建一个我正在实现两个手势的应用程序:
对于捏缩放我使用ManipulationStarted - > ManipulationDelta - >在ManipulationCompleted
对于滑动,我使用PointerPressed - > PointerMoved - > PointerReleased
问题是,当ManipulationStarted尝试进行PinchToZoom操作时会触发,PointerPressed事件也会触发!并且还要执行其他手势!
我可以找出将这些与手势分开的最佳方式,这样做的最佳做法是什么,我应该忽略一些有关手势机制的内容。
答案 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知道用户当前正在表达什么类型的手势。