在画布上拖放形状
Posted
技术标签:
【中文标题】在画布上拖放形状【英文标题】:Drag & Drop Shapes on Canvas 【发布时间】:2011-01-01 07:15:42 【问题描述】:我在Canvas
上放置了几个形状(如Ellipse
和Rectangle
)。
现在,我希望用户能够拖放这些形状。
是否有一些我可以使用的预定义功能,或者我应该使用鼠标事件自己实现拖放?
谢谢!
【问题讨论】:
【参考方案1】:自己处理鼠标事件和实现拖放肯定会奏效,但根据您的尝试,您可能能够利用 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 命名空间。
【讨论】:
嗨,我对 Expression Blend 不是很熟悉,但它听起来很有趣。我正在做某种程序,使用户能够绘制几何问题(圆、三角形、平分线等)。由于形状是由用户动态创建的,我想我需要在 C# 而不是 XAML 中设置 MouseDragElementBehavior,对吧?你能提供一个 C# 示例代码吗?我应该如何引用 System.Windows.Interactivity.dll 和 Microsoft.Expression.Interactions.dll ?谢谢! 如果您没有安装 Expression Blend 3,则必须下载并安装 SDK(免费)才能引用 DLL。你可以在这里下载它:microsoft.com/downloads/… 行为的好处之一是能够封装一些 UI 行为代码,然后在 XAML 中以声明方式将其附加到元素。但是,也可以在代码隐藏中实例化和附加行为,因此我将编辑上面的内容以在 C# 中包含一个示例。 听起来很有趣...我下载了“Microsoft Expression Blend 3 SDK”,但是当我开始安装它时,我收到了这条消息:“.Net 版本 3.5 或更新的运行时组件必须先安装正在安装 Microsoft Expression Blend 3 SDK。请在更正问题后再次尝试安装。”。但是,我看到我的计算机上安装了“Microsoft .Net Framework 3.5”。这还不够吗? 不确定...下载要求说 .Net 3.5 SP1。你确定你已经安装了 SP1 吗? 是的。以下是我计算机上安装的所有 .NET 内容:* Microsoft .NET Compact Framework 2.0 SP2 * Microsoft .NET Compact Framework 3.5 * Microsoft .NET Framework 2.0 Service Pack 1 * Microsoft .NET Framework 3.0 Service Pack 1 * Microsoft .NET框架 3.5 有什么遗漏吗?你能指点我所有丢失的东西的下载页面吗?谢谢!【参考方案2】:我相信您需要自己执行此操作,使用鼠标事件和可视化树。这是一篇我相信会有所帮助的文章 - link text。如果没有,我有一些示例代码,我可以在今晚晚些时候发布。
HTH
【讨论】:
以上是关于在画布上拖放形状的主要内容,如果未能解决你的问题,请参考以下文章