Silverlight的。需要修复。向右拖动堆栈面板项会将其移动到其他项目下方

时间:2010-03-10 10:41:56

标签: silverlight silverlight-toolkit

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

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

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

2 个答案:

答案 0 :(得分:1)

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

我做了什么来解决它:

  1. 创建了一个视觉提示(通用项目的半透明形状,以便在拖动操作期间对其进行重新设置)
  2. 使cue不可见(width = 0)并始终将其保持为堆栈面板中最后一个元素
  3. 向上,向下,移动
  4. 订阅堆栈面板鼠标左键
  5. 使用代码
  6. 模拟拖放
  7. 启动拖动后,我将提示转为可见,并将其转换变换设置为当前鼠标坐标
  8. 调整每次鼠标移动事件的转换变换
  9. On drop我再次隐藏提示并以我想要的方式重新排列项目。
  10. 再次强调 - 无论你做什么 - 你必须使用StackPanel.Children集合中的最后一个元素进行操作 ....

答案 1 :(得分: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);
    }
}