Silverlight MouseDragElementBehavior。如何在拖放后重新排列项目?

时间:2010-03-09 21:54:18

标签: silverlight silverlight-3.0 drag-and-drop attachedbehaviors

我的堆栈面板中包含自定义控件。用户可以添加或删除项目。

我已将MouseDragElementBehavior附加到每个项目。所以现在用户可以在堆栈面板中移动它们。

然而,现在的项目是以任意方式安排的。真是一团糟。它们留在用户离开的地方。

我现在需要的是将它们堆叠成堆叠面板应该是......一个接一个......

所以我需要简单地让用户使用拖放操作来更改项目的顺序,但必须精确地堆叠项目。

有DragFinished事件,但我真的没有看到行为如何移动项目。我认为这是保证金变化但保证金保持为0 ......我不知道下一步该做什么。

欣赏一点帮助。

1 个答案:

答案 0 :(得分:1)

MouseDragElementBehavior使用附加元素的RenderTransform属性上的Transform(即应用行为的属性)来完成其工作(确切的转换类型取决于RenderTransform属性的状态,但它将是TranslateTransform或一个MatrixTransform)。

完成拖动后不会重置转换(也不会因为元素在开始拖动时会快速回到StackPanel中的位置),这就是为什么元素会停留在“用户离开它们”的原因”

要以您谈论的方式更改StackPanel中的项目位置,您必须使用DragFinished事件。您可能想要做的是找出StackPanel中元素最终的位置(作为拖动的结果,即面板中哪个元素将“向下推”)然后创建一个动画以从当前元素中为元素设置动画位置(用户释放拖动的位置)到StackPanel中的最终位置,另一个动画将“推送”元素移动到StackPanel中的新位置(VisualTreeHelper可能在这里有帮助(我认为))。完成这些动画后,只需在StackPanel中为每个项目设置新索引,然后删除RenderTransform翻译。

相关问题