我有一个带有State属性的ViewModel和一个带有背景画笔的简单矩形的Datatemplate。每当ViewModel的状态发生变化时,我想触发一个动画,该动画以画笔当前所具有的颜色开始,并将其动画为表示新状态的新颜色。我用datatriggers完成了这个。它几乎可以工作。我唯一的问题是,它不是以画笔当前所具有的颜色开始,而是以未动画的基色来开始。这可能是因为我在退出操作中删除了动画。但如果我不这样做,我只能动画一次。我错过了什么?
我遇到的另一个问题是:我需要在很多不同的数据模板中使用这种状态动画,它总是绑定到同一属性(“状态”),并且它们总是为SolidColorbrush设置动画。有没有办法可以使用资源和/或样式在datatemplates中共享这些数据触发器动画?
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=State}" Value="Active">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="activeStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Green" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="activeStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Error">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="errorStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Red" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="errorStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Wait">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="waitStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Yellow" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="waitStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
<DataTrigger Binding="{Binding Path=State}" Value="Inactive">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="inactiveStoryboard" HandoffBehavior="SnapshotAndReplace">
<Storyboard>
<ColorAnimation To="Gray" FillBehavior="HoldEnd" Duration="00:00:0.25" Storyboard.TargetName="stateBrush" Storyboard.TargetProperty="Color" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="inactiveStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
</DataTemplate.Triggers>
答案 0 :(得分:0)
我无法完全回答你的问题,但我至少可以指出你可以分享故事板,但我不确定DataTriggers本身。但有趣的是。我想知道关于Bindings的同样的事情,因为我经常有多次重复使用单个绑定,并试图找到一种方法来声明它一次并至少在单个Control或XAML ResourceDictionary中重用。