Изменить движение по умолчанию DragDecorator в ListBoxDragDropTarget

Я использую ListBoxDragDropTarget из набора инструментов Silverlight и хочу изменить движение элемента при его перетаскивании. Так что в моей панели ListBox она может перемещаться только внутри панели, и только вертикальное движение должно быть разрешено, а не горизонтально.

По умолчанию вы можете перемещать элементы из ListBox по всему приложению, и я не хочу, чтобы он был перемещаемым только в ListBox.

Итак, я попытался изменить RenderTransform PopupControl и DragDecoratorControl и даже 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?

0 ответов

Другие вопросы по тегам