Silverlight. Исправление необходимо. Перетаскивание элемента панели стека вправо перемещает его под другие элементы - PullRequest
0 голосов
/ 10 марта 2010

У меня есть панель стека с пользовательскими элементами управления. Я прикрепляю стандартный MouseDragElementBehavior к каждому элементу.

Когда я перетаскиваю вправо, элемент перемещается под другими элементами.

Каким было бы жизнеспособное решение для создания лучшего пользовательского опыта - чтобы показать лучшую визуальную подсказку - как элемент перемещается и куда он упадет.

Ответы [ 2 ]

1 голос
/ 13 марта 2010

После небольшой переделки я понял, что ничто не может быть перетащено в панель стека вправо, не будучи покрытым другими элементами ... если вы не перетащите очень правильный элемент ..

Что я сделал, чтобы решить эту проблему:

  1. Создание визуальной подсказки (полупрозрачная форма универсального элемента для повторного представления его во время операции перетаскивания)
  2. Сделал кий невидимым (width = 0) и оставил его всегда как самый последний элемент дочерней панели стека
  3. Подписал панель стека на левую кнопку мыши вверх, вниз, на ход
  4. Эмулируемое перетаскивание с кодом
  5. После начала перетаскивания я поворачиваю кий на видимый и устанавливаю его трансляционное преобразование в текущие координаты мыши
  6. Настройка преобразования преобразования при каждом событии перемещения мыши
  7. При падении я снова скрываю кий и переставляю элементы так, как хочу.

Подчеркнем еще раз - как бы вы ни поступали - вам нужно манипулировать с последним элементом в коллекции StackPanel.Children ....

0 голосов
/ 12 марта 2010

Если 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);
    }
}
...