#741 – 使用触摸事件移动控件(Using Touch Manipulation Events to Translate an Element)

翻译 2017年06月28日 14:58:58

原文地址:https://wpf.2000things.com/2013/01/24/741-using-touch-manipulation-events-to-translate-an-element/

你可以通过使用触摸操作事件在屏幕上移动控件。让控件随着手指的移动在屏幕上移动。

首先,需要设置需要接收触摸操作事件的控件的IsManipulationEnabled 属性为true ,来开启控件接收触摸操作事件。同时还要为ManipulationStarting 和ManipulationDelta 事件注册事件处理函数。

<Canvas Name="canvMain" Background="Transparent">
    <Image Source="JamesII.jpg" Width="100"
           IsManipulationEnabled="True"
           RenderTransform="{Binding ImageTransform}"
           ManipulationStarting="Image_ManipulationStarting" ManipulationDelta="Image_ManipulationDelta"/>
</Canvas>

上面的代码中,允许用户通过手指移动图像。我们绑定图片控件的RenderTransform 属性为一个MatrixTransform 类型的实例(后面在代码中定义)。该实例包含一个控制图像“缩放”、“旋转”和“位移”的矩阵。在我们这个例子中,我们只在ManipulationDelta事件中修改矩阵控制位移部分的矢量。

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
 
        ImageTransform = new MatrixTransform(); // XAML中绑定的MatrixTransform 实例
    }
 
    private MatrixTransform imageTransform;
    public MatrixTransform ImageTransform
    {
        get { return imageTransform; }
        set
        {
            if (value != imageTransform)
            {
                imageTransform = value;
                RaisePropertyChanged("ImageTransform");
            }
        }
    }
 
    private void Image_ManipulationStarting(object sender, ManipulationStartingEventArgs e)
    {
        // Ask for manipulations to be reported relative to the canvas
        e.ManipulationContainer = canvMain;
    }
 
    private void Image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
        ManipulationDelta md = e.DeltaManipulation;  // 获取当前操作的最新更改
        Vector trans = md.Translation;  //获取操作在屏幕上水平和垂直移动信息

        // Update matrix to reflect translation
        Matrix m = imageTransform.Matrix;
        m.Translate(trans.X, trans.Y);  // 设置图像在屏幕上的水平和垂直移动距离
        imageTransform.Matrix = m;
        RaisePropertyChanged("ImageTransform");
 
        e.Handled = true;
    }
 
    public event PropertyChangedEventHandler PropertyChanged;
 
    private void RaisePropertyChanged(string prop)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}


相关文章推荐

#742&743 –使用触摸事件旋转和缩放控件

原文地址:https://wpf.2000things.com/2013/01/25/742-using-touch-manipulation-events-to-rotate-an-element/...

starling教程-触摸事件(Touch Events)

在前面提到过,Starling是Sparrow的姊妹篇,正因为这样,Starling里的touch事件的机制其实是为移动设备的触摸交互设计的,所以当你使用它进行使用鼠标交互的桌面应用开发时,第一眼会感...

html5移动端触摸事件touch

移动端主要的触摸事件有三个: touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。 touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,...

#715 – 在Canvas中使用Thumb控件实现拖动目标的功能(Using the Thumb Control to Drag Objects on a Canvas)

原文地址:https://wpf.2000things.com/2012/12/19/715-using-the-thumb-control-to-drag-objects-on-a-canvas/ ...

#713 – 在拖拽操作中使用控件预览图作为鼠标(Setting the Cursor to an Image of an UIElement While Dragging)

原文地址:https://wpf.2000things.com/2012/12/17/713-setting-the-cursor-to-an-image-of-an-uielement-while-...

移动web开发,12个触摸及多点触摸事件常用Js插件

QUO JS 支持事件:Touch, Tap, Double tap, Hold, Fingers, Swipe, Swipe Up, Swipe Right, Swipe Down, Swipe ...

自定义控件之触摸事件的传递

1、dispatchTouchEvent方法: 每个
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)