我有一个ListView
并且我编辑了它的ItemContainerStyle
来修改某些样式,但我不知道如何在添加项目时删除那些烦人的动画。
使用ItemsControl
,当您添加新项目时,它会立即显示,而不会显示任何动画。
使用ListView
,该项目需要一段时间,然后会启动动画显示。
我只想删除add animation
,当我点击Add item
时,它会立即显示,没有额外的内容。
我认为它应该属于ItemContainerStyle
但是我甚至评论了所有的视觉状态动画并且仍然存在。我错过了一些东西。
答案 0 :(得分:16)
这些动画称为过渡,它们是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
。
答案 1 :(得分:4)
它可能位于默认的ItemsPanel中。
您可以尝试这样的事情:
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel>
<VirtualizingStackPanel.ChildrenTransitions>
<TransitionCollection/>
</VirtualizingStackPanel.ChildrenTransitions>
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
为什么你要反对设计语言中Fast and Fluid的流畅部分呢?您是否尝试实施比模板更平淡的东西,或者您是否计划添加自己的过渡?
答案 2 :(得分:2)
感谢达米尔的回答,这就是我做到的。只需在 App.xaml
中添加此内容即可<Application...>
<Application.Resources>
<ResourceDictionary>
...
<Style TargetType="ListView">
<Setter Property="ItemContainerTransitions">
<Setter.Value>
<TransitionCollection/>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
答案 3 :(得分:1)
这将起作用-
listView.ItemContainerTransitions = null;
您必须为ItemContainerTransitions
属性分配一个新引用(或空值)。更改此属性已引用的集合中的值将不起作用。
这行不通-
listView.ItemContainerTransitions.Clear();
答案 4 :(得分:0)
正如提到的评论之一,简单地添加一下就对我有用:
<ListView.ItemContainerTransitions>
<TransitionCollection/>
</ListView.ItemContainerTransitions>
不需要其他所有代码。
答案 5 :(得分:0)
除了建议的ItemContainerTransitions删除建议之外,还有一个其他动画可能需要删除。
在ListViewItem模板中,有一个名为ContentPresenterTranslateTransform的转换动画,它将项目内容滑入到位。您只需从模板的情节提要中删除该动画即可。
答案 6 :(得分:-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);