Welcome

首页 / 软件开发 / .NET编程技术 / WPF中如何使用行为示例:Canvas控件拖放行为的演示

WPF中如何使用行为示例:Canvas控件拖放行为的演示2015-01-011、获取行为的支持,安装Expression Blend 4 SDK(http://www.microsoft.com/zh-cn/download/details.aspx?id=10801) 。

2、创建行为库

(1)创建一个Class Project,添加WPF必备的以及WPF中支持行为必备的dll文件。

其中,System.Windows.Interactivity.dll组件在目录(需要安装Blend SDKs):C:Program Files (x86)Microsoft SDKsExpressionBlend.NETFrameworkv4.0Libraries。

(2)创建DragInCanvasBehavior.cs,继承类Behavior<UIElement>,overrideBehavior<UIElement>得OnAttached()和OnDetaching()方法,代码如下:

protected override void OnAttached(){base.OnAttached();this.AssociatedObject.MouseLeftButtonDown += AssociatedObject_MouseLeftButtonDown;this.AssociatedObject.MouseLeftButtonUp += AssociatedObject_MouseLeftButtonUp;this.AssociatedObject.MouseMove += AssociatedObject_MouseMove;}/// <summary>/// Behavior.OnDetaching(),移出事件处理程序/// </summary>protected override void OnDetaching(){base.OnDetaching();this.AssociatedObject.MouseLeftButtonDown -= AssociatedObject_MouseLeftButtonDown;this.AssociatedObject.MouseLeftButtonUp -= AssociatedObject_MouseLeftButtonUp;this.AssociatedObject.MouseMove -= AssociatedObject_MouseMove;}
(3)添加的行为的事件处理程序

private void AssociatedObject_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){if (canvas == null){canvas = VisualTreeHelper.GetParent(this.AssociatedObject) as Canvas;}if (canvas != null){isDragging = true;mouseOffset = e.GetPosition(this.AssociatedObject);AssociatedObject.CaptureMouse();}}private void AssociatedObject_MouseMove(object sender, System.Windows.Input.MouseEventArgs e){if (canvas != null && isDragging == true){Point p = e.GetPosition(canvas);AssociatedObject.SetValue(Canvas.TopProperty, p.Y - mouseOffset.Y);AssociatedObject.SetValue(Canvas.LeftProperty, p.X - mouseOffset.X);}}private void AssociatedObject_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){if (isDragging){AssociatedObject.ReleaseMouseCapture();isDragging = false;}}