1

我正在使用 Silverlight Toolkit 中的 ListBoxDragDropTarget,我想在拖动项目时更改它的移动。因此,在我的 ListBox 面板中,它只能在面板内移动,并且只允许垂直移动而不是水平移动。

默认情况下,您可以将 ListBox 中的项目移动到整个应用程序上,我不希望它只能在 ListBox 中移动。

所以我尝试的是更改 PopupControl 和 DragDecoratorControl 的 RenderTransform,甚至是模板内的 Canvas。

public class FixedListBoxDragDropTarget : ListBoxDragDropTarget
{
    public Popup DragPopupControl { get; set; }
    public DragDecorator DragDecoratorControl { get; set; }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        DragPopupControl = GetTemplateChild(DragPopupName) as Popup;
        DragDecoratorControl = GetTemplateChild(DragDecoratorName) as DragDecorator;
    }
}

在 ListBoxItems 上附加了 MouseMove 事件

private void TopicUsedControl_MouseMove_1(object sender, System.Windows.Input.MouseEventArgs e)
{
    //Get the Control
    var dragDropPanel = UIHelper.FindChild<FixedListBoxDragDropTarget>(Application.Current.RootVisual, "DragDropControl");

    var transform = dragDropPanel.DragPopupControl.RenderTransform as CompositeTransform;
    var transformDragdecorator = dragDropPanel.DragDecoratorControl.RenderTransform as CompositeTransform;
    if (transform == null && transformDragdecorator == null)
    {
        transform = new CompositeTransform();
        transformDragdecorator = new CompositeTransform();
        dragDropPanel.DragPopupControl.RenderTransform = transform; //PopupControl of Template
        dragDropPanel.DragPopupControl.Child.RenderTransform = transform; //Canvas inside the Template
        dragDropPanel.DragDecoratorControl.RenderTransform = transformDragdecorator; // Dragdecorator of Template
    }

    transform.TranslateX = 0;
    transform.TranslateY = 10;
    transformDragdecorator.TranslateX = 0;
    transformDragdecorator.TranslateY = 10;
}

我试图将 RenderTranform 设置为控件不再移动的固定值来测试它。但它什么也没发生,我可以用鼠标移动控件,上面的代码没有任何效果。

如何更改或覆盖 dragdecorator 的默认移动行为?

4

0 回答 0