Взгляните на AnimatingTilePanel Кевина Мура . Когда элементы добавляются или удаляются с панели, остальные элементы анимируются, чтобы убраться с дороги или занять оставшееся пространство. Вы хотели бы сделать что-то подобное, кроме как на основе логики StackPanel.
Вы хотите рассмотреть проблему в двух частях. Второе, вероятно, будет намного проще.
- Создайте панель (не элемент управления), которая анимирует своих дочерних элементов так, как вы хотите.
- Создайте шаблон ListBox, который задает ItemsPanelTemplate , который использует новую панель вместо панели стека по умолчанию.
В конце концов, идея в том, что вам вообще не нужно создавать собственный элемент управления ListBox. Ваше взаимодействие с ListBox (которое будет осуществляться через его свойство Items или, предпочтительно, связанную коллекцию) будет выполняться точно так же, как если бы анимация вообще не существовала. Вы будете полагаться на пользовательский класс Panel для выполнения анимации.
ОБНОВЛЕНИЕ
Я также нашел этот образец, AnimatedLayoutPanel , который очень похож, но есть хорошая витрина на основе Silverlight.