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;
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章