原文:
多点触摸操作
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37591671/article/details/69487226
1.要处理Manipulation事件,首先必须设置UIElement的IsManipulationEnabled为true
2.ManipulationInertiaStartingEvent事件包含一个ManipulationStartingEventArgs参数,通过该参数可以设置:
UIElement的ManipulationContainer —— 设置该UIElement的容器
Mode —— 处理的事件类型,包含以下枚举
None:不处理
TranslateX:处理水平移动
TranslateY:处理垂直移动
Translate:处理移动
Rotate:处理旋转
Scale:处理缩放
All:处理所有事件
private void image_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
{
// 设置容器
e.ManipulationContainer = canvas;
//处理事件类型.
e.Mode = ManipulationModes.All;
}
3.要实现控件的移动,缩放,旋转,可以在控件ManipulationDeltaEvent事件中使用以下代码:
private void image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
// 获取被操作对象
FrameworkElement element = (FrameworkElement)e.Source;
//使用Matrix操作对象.
Matrix matrix = ((MatrixTransform)element.RenderTransform).Matrix;
var deltaManipulation = e.DeltaManipulation;
// 设置中心点
Point center = new Point(element.ActualWidth / 2, element.ActualHeight / 2);
center = matrix.Transform(center);
// 处理缩放
matrix.ScaleAt(deltaManipulation.Scale.X, deltaManipulation.Scale.Y, center.X, center.Y);
// 处理旋转
matrix.RotateAt(e.DeltaManipulation.Rotation, center.X, center.Y);
//处理移动.
matrix.Translate(e.DeltaManipulation.Translation.X, e.DeltaManipulation.Translation.Y);
// 设置matrix.
((MatrixTransform)element.RenderTransform).Matrix = matrix;
}