在 ControlTemplate 中干净地跳过故事板
Skip storyboard cleanly in ControlTemplate
我有一个 ToggleButton 样式,它定义了一个 ControlTemplate。我的 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>
Is there a way i could add a condition in my EventTrigger ?
简答:否
引发相应事件时始终应用 EventTrigger
。
如果您想有条件地触发动画,您应该切换到使用 MultiDataTrigger
或以编程方式实现动画。
我有一个 ToggleButton 样式,它定义了一个 ControlTemplate。我的 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>
Is there a way i could add a condition in my EventTrigger ?
简答:否
引发相应事件时始终应用 EventTrigger
。
如果您想有条件地触发动画,您应该切换到使用 MultiDataTrigger
或以编程方式实现动画。