Как удалить анимацию элемента списка ListView?

У меня есть ListView, и я отредактировал его ItemContainerStyle, чтобы изменить какой-то стиль, но я не знаю, как удалить эту надоедливую анимацию при добавлении элемента.

С ItemsControl, когда вы добавляете новый элемент, он появляется мгновенно, без какой-либо анимации.

С помощью ListView элемент занимает некоторое время, а затем запускает анимацию, чтобы показать его.

Я просто хочу удалить этот add animation, и когда я нажимаю Add item, он появляется мгновенно, без лишних вещей.

Я думаю, что он должен принадлежать ItemContainerStyle, но даже я закомментировал все анимации визуального состояния и все еще там. Я что-то упустил.

Ответ 1

Эти анимации называются переходами, и они являются частью ListViewStyle. Чтобы изменить его, щелкните правой кнопкой мыши на элементе ListView в конструкторе и выберите Edit Template > Edit a Copy.... Это добавит встроенный стиль в ваш XAML.

Вам интересна следующая часть стиля:

<Setter Property="ItemContainerTransitions">
    <Setter.Value>
        <TransitionCollection>
            <AddDeleteThemeTransition/>
            <ContentThemeTransition/>
            <ReorderThemeTransition/>
            <EntranceThemeTransition IsStaggeringEnabled="False"/>
        </TransitionCollection>
    </Setter.Value>
</Setter>

Я не уверен, какая анимация вам не нравится, но попробуйте удалить AddDeleteThemeTransition и/или EntranceThemeTransition из TransitionCollection. Он должен сделать трюк.

Не забудьте убедиться, что измененный стиль применяется к желаемому ListView.

Ответ 2

Он может быть в позиции ItemsPanel по умолчанию.

Вы можете попробовать что-то вроде этого:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <VirtualizingStackPanel>
            <VirtualizingStackPanel.ChildrenTransitions>
                <TransitionCollection/>
            </VirtualizingStackPanel.ChildrenTransitions>
        </VirtualizingStackPanel>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

Почему, хотя вы хотите пойти против жидкой части Быстрого и Жидкого на языке дизайна? Вы пытаетесь реализовать что-то более мягкое, чем шаблоны, или планируете добавить свои собственные переходы?

Ответ 3

Спасибо Дамиру ответ, вот как я это сделал. Просто добавьте это в свой App.xaml

<Application...>
    <Application.Resources>
        <ResourceDictionary>
            ...
            <Style TargetType="ListView">
                <Setter Property="ItemContainerTransitions">
                    <Setter.Value>
                        <TransitionCollection/>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Ответ 4

Как уже упоминалось в одном из комментариев, простое добавление этого помогло мне:

<ListView.ItemContainerTransitions> 
    <TransitionCollection/> 
</ListView.ItemContainerTransitions>

Нет необходимости во всем другом коде.

Ответ 5

В UWP я создал следующий код для удаления анимации:

// Remove Add/Delete animations
TransitionCollection tc = _listView.ItemContainerTransitions;
for (int i = tc.Count - 1; i >= 0; i--) if (tc[i] is AddDeleteThemeTransition) tc.RemoveAt(i);