在 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 或以编程方式实现动画。