11

我有一个ListView,我编辑了它ItemContainerStyle以修改一些样式,但我不知道如何在添加项目时删除那个烦人的动画。

使用ItemsControl,当您添加一个新项目时,它会立即出现,没有任何动画。

使用ListView,该项目需要一段时间,然后它开始显示动画。

我只想删除它add animation,当我点击Add item它时,它会立即出现,没有额外的东西。

我认为它应该属于ItemContainerStyle但即使我注释掉了所有的视觉状态动画并且仍然存在。我错过了一些东西。

4

7 回答 7

19

这些动画称为过渡,它们是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尝试EntranceThemeTransitionTransitionCollection. 它应该可以解决问题。

不要忘记确保将修改后的样式应用于所需的ListView.

于 2012-11-26T05:57:41.807 回答
4

它可能在默认的 ItemsPanel 中。

你可以尝试这样的事情:

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

为什么你要反对设计语言的快速和流畅的东西的流畅部分?您是在尝试实现比模板更平淡的东西,还是计划添加自己的过渡?

于 2012-11-26T05:53:40.477 回答
4

正如其中提到的评论之一,简单地添加它对我来说就是诀窍:

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

不需要所有其他代码。

于 2019-10-07T13:09:01.093 回答
2

感谢达米尔的回答,我就是这样做的。只需将其添加到您的App.xaml

<Application...>
    <Application.Resources>
        <ResourceDictionary>
            ...
            <Style TargetType="ListView">
                <Setter Property="ItemContainerTransitions">
                    <Setter.Value>
                        <TransitionCollection/>
                    </Setter.Value>
                </Setter>
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>
于 2017-06-15T16:30:31.550 回答
1

这将起作用 -

listView.ItemContainerTransitions = null;

您必须为该ItemContainerTransitions属性分配一个新的引用(或 null)。更改此属性已引用的集合中的值将不起作用。

这行不通——

listView.ItemContainerTransitions.Clear();
于 2020-06-12T14:28:27.447 回答
0

除了建议的 ItemContainerTransitions 删除之外,还有一个您可能想要删除的附加动画。

在 ListViewItem 模板中有一个名为 ContentPresenterTranslateTransform 的变换动画,它将项目内容滑动到位。您可以从模板的故事板中删除该动画。

于 2020-02-19T07:48:46.983 回答
-1

在 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);
于 2016-10-14T11:15:17.603 回答