操作和惯性概述

操作 使用户可以通过使用操控器 移动、旋转用户界面 (UI) 元素和调整其大小。 操控器是指鼠标、(在启用触摸屏的情况下)触笔或手指。

惯性 通过模拟元素的摩擦力,来模拟运动中的 UI 元素的实际行为。 这可使元素的移动(线性运动和角运动)逐渐减慢,直到停止。 本文介绍 .NET Framework 的操作和惯性。

操作

操作将操控器集合视为复合对象。 应用程序可以跟踪对复合对象(而不是单个组件)的更改。

考虑下图中的图像。 用户可以使用两个操控器移动、旋转和缩放该图像。 对每个操控器的更改与其他操控器一起解释。

例如,如果在该图像上有两个操控器(1 和 2),您沿 +Y 方向(向下)移动操控器 1,则对该图像的更改依赖于对操控器 2 的操作。 如果操控器 2 也沿 +Y 方向(向下)移动,则该图像仅沿 +Y 方向移动。 但是如果操控器 2 不更改,或者它沿 -Y 方向(向上)移动,则该图像缩小或旋转。

两根手指进行操作的虚拟照片。

由两个操控器操作的图像

操作处理提供一个框架,该框架用于监视操控器的子集,并将它们解释为如同一起操作而不是单独操作。 您可以同时创建若干操作处理器对象,为要在应用程序中操作的每个 UI 元素创建一个此类对象。 系统向操作处理器通告要观察的输入设备,操作处理器通过 .NET events(.NET 事件)报告操作。

操作处理器没有关于正在操作的特定元素的信息。 应用程序分别对特定于应用程序的元素应用更改。 例如,应用程序对图像应用变换,或重新绘制它,以便在其新位置或用新大小或方向显示它。

操作设计用于二维 (2-D) affine transformations(仿射变换)。 这些变换包括平移、旋转和缩放。

操作的组成部分

操作是 Manipulator2D 对象的集合。 此聚合操作由原点和椭圆表示。 原点是正在操作元素的所有操控器的平均位置。 椭圆有一个半径,该半径是原点与每个 Manipulator2D 对象的平均距离。

操作的各部分。

两个操控器(1 和 2)、原点和椭圆都指定操作

当添加、移动或移除 UI 元素的操控器时,应用程序通过调用 ProcessManipulators() 方法更新 ManipulationProcessor2D 对象。 当操作首次开始时,引发 Started 事件。

注意注意

操作处理在基于框架的更新环境中使用时效率更高。当在 Microsoft XNA 应用程序中使用操作处理时,不会考虑这一点,这是因为 XNA 框架使用 Game.Update 方法提供基于框架的更新。在另一个环境(例如 WinForms)中,可能需要提供您自己的基于框架的逻辑,以便收集操作和定期将它们成批发送给 ProcessManipulators() 方法。

当操控器数量或其位置更改时,引发 Delta 事件。 传递给 Delta 事件处理程序的 Manipulation2DDeltaEventArgs 对象的属性指定了自从上一事件以来发生的原点更改、缩放、旋转和平移。 操作的原点在操控器移动时以及添加或移除操控器时更改。 平移值指定操作包括的 X 和 Y 移动量。

应用程序使用新值重新绘制 UI 元素。

在联系人 A 移到右边后执行的操作。

操控器 1 移动并导致原点更改

当从 ManipulationProcessor2D 对象移除最后一个与操作关联的操控器时,引发 Completed 事件。

操作处理模型

操作处理器使用“直接使用”模型。 对于此简单模型,应用程序必须将所有输入事件详细信息传递给操作处理器。 输入事件可以由任何输入基元(如鼠标设备、触笔或手指)引发。 此过程提供了直接筛选机制和简单使用模型,以便应用程序可以在需要时批处理输入事件。

为了使应用程序在操作过程中包括输入基元,它根据输入基元的详细信息创建了 Manipulator2D 结构,并使用 ProcessManipulators() 方法将该结构传递给操作处理器。 操作处理器然后引发事件,应用程序必须处理这些事件以便以适当的方式更新可视组件。

直接使用模型的操作流。

操作处理模型

惯性

惯性处理器使应用程序可以通过模拟实际行为来推断 UI 元素的位置、方向和其他属性。

例如,当用户轻抹某元素时,它可以连续移动,减速,然后缓慢停止。 惯性处理器实现此行为的方式是让仿射二维值(原点、缩放、平移和旋转)以指定的减速率在指定时间内更改。

像操作处理一样,惯性处理器没有有关任何特定 UI 元素的信息。 为了响应在 InertiaProcessor2D 对象上引发的事件,应用程序会单独对特定于应用程序的元素应用更改。

惯性处理和操作处理通常一起使用。 它们的界面相似,它们引发的事件(在某些情况下)相同。 通常,惯性处理在 UI 元素的操作完成时开始。 开始方法是侦听 Completed 事件,然后从该事件处理程序开始惯性处理。

请参见

参考

System.Windows.Input.Manipulations