动画样式被覆盖
本文关键字:覆盖 样式 动画 | 更新日期: 2023-09-27 18:28:21
我正在为我所有的TreeView制作动画。。。。。
有一个app.xaml与:
<Style TargetType="{x:Type TreeView}">
<Style.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<EventTrigger RoutedEvent="TreeViewItem.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity"
From="0" To="1" BeginTime="00:00:00" Duration="00:00:01" FillBehavior="Stop"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
它适用于每个TreeView,我可以看到TreeViewItem逐渐消失。
但是,如果TreeView的定义如下,触发器的样式为:
<TreeView>
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
//Do some work
</Trigger>
</Style.Triggers>
</Style>
</TreeView.Resources>
<TreeViewItem Header="Item1">
<TreeViewItem Header="Item2">
<TreeViewItem Header="Item3"/>
<TreeViewItem Header="Item4"/>
</TreeViewItem>
<TreeViewItem Header="Item5"/>
</TreeViewItem>
<TreeViewItem Header="Item6"/>
</TreeView>
动画将不再工作。对此有什么解决方案或变通方法吗?我真的不想把整个动画代码放在TreeView中。。。
1)使用现有样式创建一个基本命名样式
<Style x:Key="baseTreeViewStyle"
TargetType="{x:Type TreeViewItem}"> existing style here </Style>
2) 根据你的基本风格创建一个没有名字的风格-这将是你隐含的全局风格
<Style TargetType="{x:Type TreeViewItem}"
BasedOn={StaticResource baseTreeViewStyle} />
3) 在树状视图中扩展基本样式
<Style TargetType="{x:Type TreeViewItem}"
BasedOn="{StaticResource baseTreeViewStyle}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="True">
//Do some work
</Trigger>
</Style.Triggers>
</Style>
现在,您可以获得一个隐式全局样式,但如果需要特定的附加行为,则可以覆盖基本样式。
为了更彻底,您的基本样式应该基于默认的TreeViewItem样式
<Style x:Key="baseTreeViewStyle"
TargetType="{x:Type TreeViewItem}"
BasedOn="{StaticResource {x:Type TreeViewItem}}">
existing style here
</Style>