• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

UI前沿技术-WPF中的多点触控操作事件(3)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-27点击:
首先,请注意所有三个 Image 元素上的设置:

IsManipulationEnabled="True"

默认情况下,此属性为 false。对于您希望在其上获得多点触控输入并生成操作事件的任何元素,您必须将其设置为 true。

操作事件是 WPF 路由事件,这意味着这些事件会使可视化树浮现出来。在此程序中,Grid 和 MainWindow 的 IsManipulationEnabled 属性均未设置为 true,但您仍可将操作事件的处理程序附加至 Grid 和 MainWindow 元素,或者在 MainWindow 类中覆盖 OnManipulation 方法。

另请注意,每个 Image 元素将其 Render­Transform 设置为一个六位数的字符串:

RenderTransform="0.5 0 0 0.5 100 100"

这是设置已初始化的 MatrixTransform 对象的 RenderTransform 属性的快捷方式。在此特定示例中,设置为 MatrixTransform 的 Matrix 对象已经过初始化,可执行 0.5 个单位的缩放(使照片缩小至实际大小的一半)和朝右下方的 100 个单位的平移。该窗口的代码隐藏文件会访问并修改此 MatrixTransform。

 

图 3 显示了完整的 MainWindow.xaml.cs 文件,该文件仅覆盖两个方法,即 OnManipulationStarting 和 OnManipulationDelta。这些方法处理由 Image 元素生成的操作。

图 3 SimpleManipulationDemo 的代码隐藏文件

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace SimpleManipulationDemo {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}

protected override void OnManipulationStarting(
ManipulationStartingEventArgs args) {

args.ManipulationContainer = this;

// Adjust Z-order
FrameworkElement element =
args.Source as FrameworkElement;
Panel pnl = element.Parent as Panel;

for (int i = 0; i < pnl.Children.Count; i++)
Panel.SetZIndex(pnl.Children[i],
pnl.Children[i] ==
element ? pnl.Children.Count : i);

args.Handled = true;
base.OnManipulationStarting(args);
}

protected override void OnManipulationDelta(
ManipulationDeltaEventArgs args) {

UIElement element = args.Source as UIElement;
MatrixTransform xform =
element.RenderTransform as MatrixTransform;
Matrix matrix = xform.Matrix;
ManipulationDelta delta = args.DeltaManipulation;
Point center = args.ManipulationOrigin;

matrix.ScaleAt(
delta.Scale.X, delta.Scale.Y, center.X, center.Y);
matrix.RotateAt(
delta.Rotation, center.X, center.Y);
matrix.Translate(
delta.Translation.X, delta.Translation.Y);
xform.Matrix = matrix;

args.Handled = true;
base.OnManipulationDelta(args);
}
}
}

 

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ