0

我有带有自定义控件的堆栈面板。我将标准 MouseDragElementBehavior 附加到每个项目。

当我向右拖动时,该项目在其他项目下方移动。

什么是创建更好的用户体验的可行解决方案- 显示更好的视觉提示 - 项目如何移动以及它将被丢弃在哪里。

4

2 回答 2

1

经过一番修补后,我意识到没有任何东西可以在堆栈面板中拖动到右侧而不被其他元素覆盖..除非您拖动非常正确的项目..

我做了什么来解决它:

  1. 创建了一个视觉提示(通用项目的半透明形状以在拖动操作期间表示它)
  2. 使提示不可见(宽度= 0)并始终将其保留为堆栈面板子项的最后一个元素
  3. 订阅堆栈面板鼠标左键向上,向下,移动
  4. 使用代码模拟拖放
  5. 一旦开始拖动,我将提示变为可见并将其平移变换设置为当前鼠标坐标
  6. 在每个鼠标移动事件上调整平移变换
  7. 放下时,我再次隐藏提示并以我想要的方式重新排列项目。

再次强调 -无论你做什么 - 你必须使用 StackPanel.Children 集合中的最后一个元素进行操作......

于 2010-03-13T14:14:23.283 回答
0

如果 MouseDragElementBehavior 不能按您需要的方式工作,您总是可以从该类下降并根据您的需要对其进行自定义。例如:

public class DragBehvaior : MouseDragElementBehavior
{
    public DragBehvaior()
    {
        this.DragBegun += new MouseEventHandler(DragBehvaior_DragBegun);
    }

    void DragBehvaior_DragBegun(object sender, MouseEventArgs e)
    {
        var element = this.AssociatedObject as UIElement;
        // Calculate the correct ZIndex here.
        Canvas.SetZIndex(element, 100);
    }
}
于 2010-03-12T13:17:26.910 回答