ManipulationMode
应该在控件Img
上设置。此外,您可能希望指定所需的确切模式,而不是All
防止不必要的手势处理。
<Image x:Name="Img" Source="{x:Bind ImgSource}" Width="150" Height="150" Stretch="UniformToFill"
ManipulationMode="TranslateX, TranslateY"
ManipulationStarted="Img_ManipulationStarted"
ManipulationDelta="Img_ManipulationDelta"
ManipulationCompleted="Img_ManipulationCompleted">
<Image.RenderTransform>
<CompositeTransform x:Name="Transform" />
</Image.RenderTransform>
</Image>
根据您上面的描述,我认为打开两者TranslateX
应该TranslateY
就足够了。然后您将需要处理操作事件,例如ManipulationStarted
,ManipulationDelta
和ManipulationCompleted
.
您的大部分逻辑应该在ManipulationDelta
平移过程中多次触发的事件中完成。这是您获得X
和Y
位置并相应地设置它们的地方。
这是一个简单的示例。
void Img_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
// dim the image while panning
this.Img.Opacity = 0.4;
}
void Img_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
this.Transform.TranslateX += e.Delta.Translation.X;
this.Transform.TranslateY += e.Delta.Translation.Y;
}
void Img_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
// reset the Opacity
this.Img.Opacity = 1;
}