WPF之行为
阅读原文时间:2023年07月13日阅读:1

Behavior的运用扩展了”交互“功能,以下记录示例:

在的项目中添加两个引用:
Microsoft.Expression.Interactions.dll
System.Windows.Interactivity.dll

主要是实现OnAttached()和OnDetaching()方法,在OnAttached()方法中关联事件处理程序,在OnDetaching()中移除事件处理程序。

public class DragInCanvsBehavior : Behavior
{
private Canvas m_Canvas;
private bool m_IsDraging;
private Point m_PositionOffset;

    protected override void OnAttached()  
    {  
        base.OnAttached();  
        AssociatedObject.MouseLeftButtonDown += AssociatedObject\_MouseLeftButtonDown;  
        AssociatedObject.MouseMove += AssociatedObject\_MouseMove;  
        AssociatedObject.MouseLeftButtonUp += AssociatedObject\_MouseLeftButtonUp;  
    }

    void AssociatedObject\_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)  
    {  
        if (!m\_IsDraging)  
            return;

        Point mouseposition = e.GetPosition(m\_Canvas);//得到鼠标相对于Canvas对象的位置  
        AssociatedObject.SetValue(Canvas.LeftProperty, mouseposition.X - m\_PositionOffset.X);//获得需要移动的相对距离  
        AssociatedObject.SetValue(Canvas.TopProperty, mouseposition.Y - m\_PositionOffset.Y);  
    }

    void AssociatedObject\_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)  
    {  
        if (!m\_IsDraging)  
            return;

        m\_IsDraging = false;  
        AssociatedObject.ReleaseMouseCapture();//释放鼠标的捕获  
    }

    void AssociatedObject\_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)  
    {  
        if (m\_Canvas == null)  
            m\_Canvas = (Canvas)VisualTreeHelper.GetParent(AssociatedObject);//捕捉到附加对象的父对象

        m\_IsDraging = true;

        m\_PositionOffset = e.GetPosition(AssociatedObject);//得到鼠标相对于附加对象的位置  
        AssociatedObject.CaptureMouse();//鼠标捕获到元素  
    }

    protected override void OnDetaching()  
    {  
        base.OnDetaching();  
        AssociatedObject.MouseLeftButtonDown -= AssociatedObject\_MouseLeftButtonDown;  
        AssociatedObject.MouseMove -= AssociatedObject\_MouseMove;  
        AssociatedObject.MouseLeftButtonUp -= AssociatedObject\_MouseLeftButtonUp;

    }  
}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器