问题描述
我有一个用于定义 ControlTemplate 的 ToggleButton 样式。我的 ToggleButton 在更改状态时会进行动画处理,但我不希望它在导航到新页面时进行动画处理。因此,我使用 SkipStoryboardToFill 在 Loaded 事件上添加了一个 EventTrigger 以避免这种行为,它可以满足我的要求。
我现在唯一的问题是,当我添加一个新的 ToggleButton 时,它会尝试跳过尚未启动的故事板,从而生成动画警告(“无法执行操作,因为指定的故事板从未应用于此对象交互式控件。”)这似乎影响了我的应用程序的性能。
我可能可以解决这个问题,但我宁愿解决实际问题。有没有办法在我的 EventTrigger 中添加条件?
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="ToggleButton.Loaded">
<SkipStoryboardToFill BeginStoryboardName="checkedSB" />
<SkipStoryboardToFill BeginStoryboardName="uncheckedSB" />
</EventTrigger>
<DataTrigger Binding="{Binding IsChecked,RelativeSource={RelativeSource Self}}"
Value="true">
<DataTrigger.Enteractions>
<BeginStoryboard Name="checkedSB">
<Storyboard Storyboard.TargetName="Ellipse"
Storyboard.TargetProperty="Margin">
<ThicknessAnimation To="20 1 2 1" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.Enteractions>
<DataTrigger.Exitactions>
<BeginStoryboard Name="uncheckedSB">
<Storyboard Storyboard.TargetName="Ellipse"
Storyboard.TargetProperty="Margin">
<ThicknessAnimation To="2 1 2 1" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</DataTrigger.Exitactions>
</DataTrigger>
</ControlTemplate.Triggers>
解决方法
有没有办法在我的 EventTrigger 中添加条件?
简答:否。
当引发相应的事件时,始终应用 EventTrigger
。
如果您想有条件地触发动画,您应该切换到使用 MultiDataTrigger
或以编程方式实现动画。