拖动;在画布上放下形状

时间:2010-01-04 15:54:44

标签: c# .net wpf graphics drag-and-drop

我在Ellipse上放了几个形状(如RectangleCanvas)。 现在,我希望用户能够拖动和放大放下这些形状。 是否有一些我可以使用的预定义功能,或者我应该实现拖动和放大器功能。使用鼠标事件放弃自己?

谢谢!

3 个答案:

答案 0 :(得分:5)

处理鼠标事件并实现拖放操作肯定会有效,但根据您尝试做的事情,您可以利用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命名空间。

答案 1 :(得分:1)

MouseDragElementBehavior类具有

  • DragBegun
  • 已完成

  • 拖动

事件。我相信订阅这些可以满足您的需求

答案 2 :(得分:-1)

我相信你需要自己动手,使用鼠标事件和可视化树。以下是我认为有用的文章 - link text。如果没有,我有一些示例代码,我可以在今晚晚些时候发布。

HTH