WPF4 中的多点触控操作事件

WPF4 中的多点触控操作事件

2023年7月19日发(作者:)

WPF4多点触摸事件

UIElement在WPF4下添加了很多支持多点触摸的事件,通过它们可以在硬件支持的情况下处理多点触摸,以下通过代码来说明通过处理这些事件,我们可以做些什么:

一.触摸相关的多种事件,跟鼠标事件是对应的,通过这些事件可以获取到多个触摸的鼠标点,并进行相应的处理

 public static readonly RoutedEvent TouchDownEvent;

 public static readonly RoutedEvent TouchEnterEvent;

 public static readonly RoutedEvent TouchLeaveEvent;

 public static readonly RoutedEvent TouchMoveEvent;

 public static readonly RoutedEvent TouchUpEvent;

以上每个事件都包含一个TouchEventArgs参数,通过该参数可以获取到一个TouchDevice信息,对应于每一次触摸,还可以通过GetTouchPoint得到一个TouchPoint,TouchPoint包含当前触摸的动作,触摸的位置等信息,通过获取到的TouchDevice,我们可以处理每一次触摸(通过判断TouchDevice的ID号来分辨不同的触摸),并通过TouchPoint获取触摸的坐标点,从而实现一些多点的逻辑,例如多点的书写(通过获取的TouchPoint来生成PathFigure,形成PathGeometry,最终填充成Path来绘制)

二.Manipulation事件,通过这些事件可以实现UIElement的一些多点手势(移动,旋转,缩放)

 public static readonly RoutedEvent ManipulationCompletedEven;

 public static readonly RoutedEvent ManipulationDeltaEvent;

 public static readonly RoutedEvent ManipulationInertiaStartingEvent;

 public static readonly RoutedEvent ManipulationStartedEvent;

1.要处理Manipulation事件,首先必须设置UIElement的IsManipulationEnabled为true

lationInertiaStartingEvent事件包含一个ManipulationStartingEventArgs参数,通过该参数可以设置:

UIElement的ManipulationContainer —— 设置该UIElement的容器

Mode —— 处理的事件类型,包含以下枚举

None:不处理

TranslateX:处理水平移动

TranslateY:处理垂直移动 Translate:处理移动

Rotate:处理旋转

Scale:处理缩放

All:处理所有事件

3.要实现控件的移动,缩放,旋转,可以在控件的ManipulationDeltaEvent事件中使用以下代码:

private void image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)

{

var element = as FrameworkElement;

if (element != null)

{

try

{

ManipulationDelta deltaManipulation = anipulation;

Matrix matrix = ;

Point center = new Point(Width / 2, Height / 2);

center = orm(center); //设置中心点

//处理缩放

t(.X, .Y, center.X, center.Y);

// 处理旋转

At(on, center.X, center.Y);

//处理移动

ate(ation.X, ation.Y);

Transform = new MatrixTransform(matrix);

d = true;

}

catch (Exception ei)

{ (ng());

}

}

}

4.此外可以在ManipulationInertiaStarting事件中设置惯性效果

private void image_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e)

{

// 移动惯性

ationBehavior = new InertiaTranslationBehavior()

{

InitialVelocity = Velocity,

DesiredDeceleration = 1 / (1000.0 * 1000.0) // 单位:一个WPF单位 / ms

};

// 缩放惯性

ionBehavior = new InertiaExpansionBehavior()

{

InitialVelocity = ionVelocity,

DesiredDeceleration = 1 / 1000.0 * 1000.0 // 单位:一个WPF单位 / ms

};

// 旋转惯性

onBehavior = new InertiaRotationBehavior()

{

InitialVelocity = rVelocity,

DesiredDeceleration = 720 / (1000.0 * 1000.0) //单位:一个角度 / ms

};

d = true;

} 5.在设置了惯性事件后,如果不处理判断控件容器的边界,那很容易一个移动就会把控件移到屏幕外部,因此此时可以在ManipulationDeltaEvent事件中加入以下代码:

if (tial)

{

Rect containingRect = new Rect(((FrameworkElement)lationContainer).RenderSize);

Rect shapeBounds = ormBounds(new Rect(Size));

if (tial && !ns(shapeBounds))

{

BoundaryFeedback(anipulation);

te();

}

}

三.总结

WPF4直接加入了Manipulation事件来支持对UIElement手势的移动,旋转和缩放,也加入了各种触摸事件来处理多个点的触摸,通过这些事件可以获取到多点触摸的坐标,从而实现各种多点逻辑

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689721454a281013.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信