(WPF) Анимировать перемещение элемента ListView - PullRequest
7 голосов
/ 23 августа 2009

Я хотел бы иметь анимацию, когда элемент в ListView меняет положение, поэтому он будет медленно перемещаться в новую позицию. Либо в шаблоне, либо в коде. Я попытался спуститься из (виртуализации) StackPanel и переопределить ArrangeOverride, чтобы изменить положение и анимировать элементы. проблема в том, что я не знаю, в какой позиции был элемент «до» обновления, поэтому я мог легко перейти на новую позицию. Я попытался проверить TranslateTransform элемента, сохранить в словаре, переопределить OnItemChanged и сохранить OldPosition / Position .., но ничего из этого не работает, потому что кажется, что элементы всегда воссоздаются (из шаблона).

Любые другие предложения?

Ответы [ 4 ]

6 голосов
/ 01 сентября 2009

Используйте поведение FluidMoveBehavior, оно облегчит вам жизнь.

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

<ItemsPanelTemplate x:Key="ItemsPanelTemplate">
            <WrapPanel>
                <i:Interaction.Behaviors>
                    <il:FluidMoveBehavior AppliesTo="Children" Duration="00:00:00.75"/>
                </i:Interaction.Behaviors>
            </WrapPanel>
</ItemsPanelTemplate>

Вы можете найти это поведение в Microsoft.Expression.Interactions.dll, который устанавливается вместе с Blend 3

1 голос
/ 01 сентября 2009

Фактически эта проблема была прекрасно решена Дэном Кревье еще в 2006 году. Ознакомьтесь с его PanelLayoutAnimator классом.

0 голосов
/ 03 ноября 2010

@ rravuri ответ работает для меня, вы должны определить как динамический ресурс, который вы можете применить напрямую, а затем назвать его likethis ItemsPanel = "{DynamicResource ItemsPanelTemplate}"

0 голосов
/ 25 августа 2009

Я понимаю, что это не совсем то, что вам нужно, но если вы не можете найти ничего лучше, вы можете взглянуть на статью Джоша Смита http://joshsmithonwpf.wordpress.com/2007/03/13/animated-filtering-of-listboxitems/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...