Silverlight MouseDragElementBehavior. Как переставить элементы после перетаскивания? - PullRequest
4 голосов
/ 10 марта 2010

У меня есть панель стека с пользовательскими элементами управления. Пользователь может добавлять или удалять элементы.

Я прикрепил MouseDragElementBehavior к каждому элементу. Теперь пользователь может перемещать их внутри панели стека.

Однако предметы теперь расположены произвольно. Это действительно беспорядок. Они остаются там, где их оставил пользователь.

Теперь мне нужно сделать так, чтобы они были сложены так, как будто должна быть панель стека ... Хорошо, один за другим ...

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

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

Ценю небольшую помощь.

1 Ответ

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

MouseDragElementBehavior выполняет свою работу, используя Transform для свойства RenderTransform присоединенного элемента (то есть для объекта, к которому применяется поведение) (точный тип преобразования зависит от состояния свойства RenderTransform, но это может быть TranslateTransform или MatrixTransform).

Преобразование не сбрасывается, когда вы заканчиваете перетаскивание (и вы не хотите, чтобы оно было, потому что элемент вернется на свою позицию в StackPanel, когда вы начали перетаскивать), и именно поэтому элемент остается там, где "пользователь оставил их ».

Чтобы изменить положение элементов в StackPanel так, как вы говорите, вам нужно использовать событие DragFinished. Что вы, вероятно, хотите сделать, это выяснить, где в StackPanel элемент окажется (в результате перетаскивания, т. Е. Какой элемент на панели он будет «толкать» вниз), а затем создать анимацию для анимации элемента из его текущего положение (где пользователь отпустил перетаскивание) в эту конечную позицию в StackPanel и другую анимацию для перемещения «помещенного» элемента в его новую позицию в StackPanel ( VisualTreeHelper , вероятно, может помочь здесь (я думаю) ). После завершения анимации просто установите новый индекс в StackPanel для каждого элемента и удалите перевод RenderTransform.

...