【问题标题】:Skip storyboard cleanly in ControlTemplate在 ControlTemplate 中干净地跳过情节提要
【发布时间】:2021-06-03 08:13:39
【问题描述】:

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

【问题讨论】:

  • 您可以考虑使用多数据触发器。加载后半秒设置切换按钮的标签或附加属性。或者。使用视图模型的另一个属性与 IsLoading 标志相结合。仅当 isloading 为 false 时,才从您的 ischecked(绑定)属性的设置器中设置此属性。
  • 最后,我切换到在 Checked 和 Unchecked 事件上使用 EventTriggers,它似乎工作正常。不知道为什么我没有早点想到。我真的没有可以调整的 ViewModel,ControlTemplate 在我的应用程序的资源字典中。不将此设置为答案,因为它不是实际问题的解决方案,更多的是关于 EventTriggers 中的条件。
  • 啊,我被提醒为什么 EventTriggers 不是解决方案。如果在页面加载之前有任何触发它们,则情节提要已启动,但找不到 TargetName 引用的元素。

标签: c# wpf triggers controltemplate


【解决方案1】:

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

简短回答:不。

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

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

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 2010-09-14
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多