【发布时间】:2011-01-01 07:15:42
【问题描述】:
我在Canvas 上放置了几个形状(如Ellipse 和Rectangle)。
现在,我希望用户能够拖放这些形状。
是否有一些我可以使用的预定义功能,或者我应该使用鼠标事件自己实现拖放?
谢谢!
【问题讨论】:
标签: c# .net wpf graphics drag-and-drop
我在Canvas 上放置了几个形状(如Ellipse 和Rectangle)。
现在,我希望用户能够拖放这些形状。
是否有一些我可以使用的预定义功能,或者我应该使用鼠标事件自己实现拖放?
谢谢!
【问题讨论】:
标签: c# .net wpf graphics drag-and-drop
自己处理鼠标事件和实现拖放肯定会奏效,但根据您的尝试,您可能能够利用 Expression Blend 行为。 Microsoft.Expression.Interactions DLL 包含一些有用的基本行为、触发器和操作,可在 Silverlight 和 WPF 中使用。
有一个 MouseDragElementBehavior 实现了元素的基本拖放功能,无论您的布局容器如何,它都应该可以工作(因此您不会被限制在 Canvas 上)。您可以使用 Blend 将此行为放到一个元素上,或者如果您愿意,可以直接在 XAML 中定义它:
<Rectangle Fill="Red" Stroke="Black" HorizontalAlignment="Left" Width="100" Height="100">
<i:Interaction.Behaviors>
<il:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
</Rectangle>
您的项目必须同时引用 System.Windows.Interactivity.dll 和 Microsoft.Expression.Interactions.dll 才能使用此行为。
编辑(显示在 C# 代码隐藏中附加此行为):
Rectangle rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red);
rect.Width = 100;
rect.Height = 100;
MouseDragElementBehavior dragBehavior = new MouseDragElementBehavior();
dragBehavior.Attach(rect);
记得在 using 语句中包含 Microsoft.Expression.Interactivity.Layout 命名空间。
【讨论】:
我相信您需要自己执行此操作,使用鼠标事件和可视化树。这是一篇我相信会有所帮助的文章 - link text。如果没有,我有一些示例代码,我可以在今晚晚些时候发布。
HTH
【讨论】: