WPF行为
- 新建一继承于Behavior的类DragInCanvasBehavior,
用于控制起作用的范围
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interactivity;
using System.Windows.Media;
namespace CustomBehaviorsLibrary {
public class DragInCanvasBehavior:Behavior<UIElement>
{
private Canvas canvas;
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;
this.AssociatedObject.MouseMove += AssociatedObject_MouseMove;
this.AssociatedObject.MouseLeftButtonUp += AssociatedObject_MouseLeftButtonUp;
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;
this.AssociatedObject.MouseMove -= AssociatedObject_MouseMove;
this.AssociatedObject.MouseLeftButtonUp -= AssociatedObject_MouseLeftButtonUp;
}
private bool isDragging = false;
private Point mouseOffset;
private void AssociatedObject_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if(canvas==null) canvas=VisualTreeHelper.GetParent(this.AssociatedObject) as Canvas;
isDragging = true;
mouseOffset = e.GetPosition(AssociatedObject);
AssociatedObject.CaptureMouse();
}
private void AssociatedObject_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
{
Point point = e.GetPosition(canvas);
AssociatedObject.SetValue(Canvas.TopProperty,point.Y-mouseOffset.Y);
AssociatedObject.SetValue(Canvas.LeftProperty,point.X-mouseOffset.X);
}
}
private void AssociatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (isDragging)
{
AssociatedObject.ReleaseMouseCapture();
isDragging = false;
}
}
}
}
- 在命名空间中对其进行引用 ```xaml
```