Как анимировать добавление и удаление в ListView/Box?

Я пытаюсь понять, как анимация работает в WPF со StoryBoards.

До сих пор мне удалось следующее:

  • создание ListView с привязкой пользовательских элементов и ресурсов;
  • с помощью ItemContainerStyle чтобы убедиться, что каждый элемент занимает всю ширину ListView;
  • с помощью EventTrigger вызвать определенную анимацию

Моя проблема проста.

Сначала я попробовал Loaded триггер для анимации элемента всякий раз, когда он добавляется в привязанный ListView ObservableCollection, Работает нормально с opacityсвойство, но проблема в том, что это событие вызывается при каждой прокрутке, что означает, что Windows загружает и выгружает элементы на ходу, чтобы сэкономить память (которая нестабильна, но использует гораздо больше ЦП со сложным элементом).

Так что это не пойдет. Кроме того, Unloaded триггер "не очень работает" и был решен здесь: /questions/6414933/kak-ya-mogu-realizovat-postepennoe-ischeznovenie-i-dobavlenie-udalenie-listitems/6414944#6414944

Итак, используя вышеупомянутое решение, я бы хотел запустить анимацию вручную.

Чтобы быть более точным, всякий раз, когда конкретное свойство моих предметов (так же, как Removing), я бы хотел StoryBoard быть начатым

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

Эти скользящие анимации должны запускаться только тогда, когда элемент добавляется в связанный ObservableCollection и когда это будет удалено.

Следующий код XAML не работает:

Внутри ListView > ListView.ItemTemplate > DataTemplate > DataTemplate.Triggers

<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=Removing}" Value="true" >
        <DataTrigger.EnterActions>
            <BeginStoryboard>
                <Storyboard >
                    <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0" Duration="0:0:0.5"/>
                    <DoubleAnimation Storyboard.TargetProperty="LayoutTransform.ScaleY" From="0" Duration="0:0:.2"/>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
    </DataTrigger>
</DataTemplate.Triggers>

Анимация непрозрачности действительно работает просто отлично. Тем не менее LayoutTransform создает следующее исключение System.InvalidOperationException: Cannot resolve all property references in the property path 'LayoutTransform.ScaleY'. Verify that applicable objects support the properties.

Более того, я просто не знаю, как сделать скользящую анимацию по оси X: /

Вот содержание моего ListViewItemContainerStyle:

<Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="Margin" Value="0, -2, 0, -2" ></Setter>
<Setter Property="LayoutTransform">
    <Setter.Value>
        <ScaleTransform x:Name="transform" />
    </Setter.Value>
</Setter>
<Setter Property="RenderTransform">
    <Setter.Value>
        <ScaleTransform/>
    </Setter.Value>
</Setter>

Спасибо за помощь

0 ответов

Другие вопросы по тегам