4

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

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

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

我现在需要的是让它们像堆栈面板应该的那样堆叠......很好地一个接一个......

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

有 DragFinished 事件,但我并没有真正看到 Behavior 如何移动项目。我认为它是 Margin 它会改变,但 margins 保持 0 ......我不知道下一步该做什么。

感谢一点帮助。

4

1 回答 1

1

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

当您完成拖动时,转换不会重置(您也不希望它重置,因为当您开始拖动时,元素会迅速回到其在 StackPanel 中的位置),这就是元素停留在“用户离开它们的位置”的原因。

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

于 2010-03-09T22:33:28.833 回答