首页 > 解决方案 > 在 ControlTemplate 中干净地跳过情节提要

问题描述

我有一个定义 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>

标签: c#wpftriggerscontroltemplate

解决方案


有没有办法在我的 EventTrigger 中添加条件?

简短的回答:没有。

EventTrigger引发相应事件时始终适用。

如果您想有条件地触发动画,您应该切换到使用 aMultiDataTrigger或以编程方式实现动画。


推荐阅读