2010-02-15 3 views
3

Предположим, у меня есть список визуальных объектов (CustomControls). Они могут находиться внутри StackPanel или быть элементами в ListView, я думаю, что контейнер является частью ответа на этот вопрос.WPF: Как оживить список компонентов?

Визуально вы можете думать об этих объектах как о предметах в очереди. Каждый раз, когда я вытаскиваю объект из нижней части этой очереди, я хотел бы оживить всю очередь с выскоренным объектом, выходящим из рамки представления, и новым (предположим, что на кадре просмотра отображается только подмножество) остальные элементы.

Каков наилучший подход для создания этой анимации и для чего это лучший контейнер?

ответ

5

Посмотрите на AnimatingTilePanel Кевина Мура. Когда элементы добавляются или удаляются с панели, остальные элементы анимируются, чтобы уйти с пути или заняться левым пространством. Вы хотели бы сделать что-то подобное, за исключением логики StackPanel.

Вы хотите подойти к проблеме в двух частях. Второй, вероятно, будет намного проще.

  1. Создайте панель (не контроль), которая оживляет его детей так, как вы хотите.
  2. Создайте шаблон ListBox, который указывает ItemsPanelTemplate, который использует вашу новую панель вместо панели стека по умолчанию.

В конце концов, идея состоит в том, что вам вообще не нужно создавать собственный элемент управления ListBox. Взаимодействие с ListBox (которое было бы через его свойство Items или предпочтительно связанная коллекция) было бы сделано точно так же, как если бы анимация вообще отсутствовала. Вы должны полагаться на пользовательский класс Panel, чтобы выполнять работу по предоставлению анимации.

UPDATE
Я также нашел этот образец, AnimatedLayoutPanel который очень похож, но есть хороший Silverlight основе витрина.

+0

первая ссылка не работает :( – metao

Смежные вопросы