WPF中控件进行伸缩移动旋转变换的经验总结

 

WPF中控件进行伸缩移动旋转变换的经验总结

(前记第一次写博客主要目的是对知识做一个系统点的总结,这样能够使自己对使用过的相关技术能有一个更加深入和全面的认识。此外在博客园看到了很多非常棒的博客,通过阅读和体会诸位的博客使自己收益匪浅。因此也有了想把自己的心得体会或是学习过程记录下来通过博客园和大家分享,共同交流共同进步。)

本篇博客主要是想和大家分享WPF中使用的针对控件进行自由移动、拉伸、旋转操作的具体实现方法和使用到的相关技术或说是类库吧;

  1. 实现方法:

对于如何实现相关操作当然还是直接以Demo的方式介绍最为直观的啦。

总结起来在这里移动、拉伸以及旋转三种操作的实现实际是使用的相同的方法:即Thumb控件的使用,然后根据Thumb控件响应鼠标的拖放操作对控件进行相应的2D变化即可实现以上三种操作;

 Demo:http://download.csdn.net/my(CSDN 下载地址)

         2相关类的介绍

Thumb:都说了实现以上三种操作最主要是使用了Thumb控件,这里当然首先是对其进行介绍的啦。

(要想使用thumb 当然得知道它在哪个类库嘛)

命名空间:  System.Windows.Controls.Primitives
程序集:  PresentationFramework(在 PresentationFramework.dll 中)

为了使Thumb分别实现移动、拉伸、旋转的功能在程序中使用了自定义控件的方式分别构造了MoveThumb、ResizeThumb、RotateThumb三个继承自Thumb的自定义控件。

使用自定义控件的好处是可以通过继承自Thumb接受的鼠标拖放操作分别实现移动、拖放、以及拉伸操作,此外还可对自定义的控件设置相应的控件模板,通过在界面以及使鼠标显示不同的形状方便用户区分不同的操作从而提升了用户的操作体验。

使用Thumb控件最重要的当然是利用thumb 提供 DragStartedDragCompleted 和 DragDelta 事件来管理与鼠标指针相关的拖动操作。 当用户按下鼠标左键时,Thumb 控件接收逻辑焦点和鼠标捕获,并引发DragStarted 事件。 在 Thumb 控件具有焦点和鼠标捕获的同时,可以无限制地多次引发 DragDelta 事件。 当用户释放鼠标左键时,Thumb 控件失去鼠标捕获,并引发DragCompleted 事件

3 WPF 中的2D变换

在WPF中涉及的2D变换主要是与Transform相关的一系列变化。它的实现原理用到了二维变换矩阵的结构就是将一个空间的点映射或变换到另一个坐标空间。具体的实现方法其实我也没有进行深究,这里就介绍一下伸缩、旋转等变换的实现需要用到的2D变换相关的类.

WPF中的控件基本都是从FrameWorkElement继承过来,因此都具有LayoutTransform和RenderTransform属性,可以设置控件的这两个属性来对控件进行2D变换。在这里得注意一下LayoutTransform和RenderTransform的区别,它们之间的主要区别就是LayoutTransform在布局之前进而RenderTransform在布局之后。

                       

(图1LayoutTransform)           (图2 RenderTransform)

由图1以及图2可以看出两者之间的差别LayoutTransform 在布局之前会进行旋转的2D变换,因此下边的button在布局计算位置时会在RolateButton的下方,而RenderTransform则由于在布局之后进行 因此RolateButton在进行旋转的2D变换后并不会导致下方的按钮下移。

表1 (2D变换类)

RotateTransform

按指定的 Angle 旋转元素。

ScaleTransform

按指定的 ScaleX 和 ScaleY 量按比例缩放元素。

TranslateTransform

按指定的 X 和 Y 量移动(平移)元素。

以上三种变换是比较常用的变换 分别对应旋转、缩放以及移动控件;

若在对某个控件同时使用多个2D变换时可以设置控件的LayoutTransform或RenderTransform属性为TransformGroup类的实例。

总结:对WPF控件进行移动,拉伸以及旋转操作使用到的知识进行了一个简单的介绍,具体实现可以参考Demo源码,改源码为本人以前在网上下载的一个小例子,基本实现了以上功能。由于时间关系就没有从头再实现一遍,若对代码或是文章有啥意见非常欢迎相互交流。

原文地址:https://www.cnblogs.com/sharepublic/p/3313566.html