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