【问题标题】:How do I revert to the previous colour after a ColorAnimation ends inside a DataTrigger?在 DataTrigger 内结束 ColorAnimation 后,如何恢复到以前的颜色?
【发布时间】:2014-02-08 00:01:56
【问题描述】:
<DataTemplate>
    <StackPanel Name="stack" Background="PaleTurquoise">
        <Grid>
            <Slider Name="sld" Value="{Binding TimeLeft}" />
        </Grid>
    </StackPanel>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding ElementName=sld, Path=Value}" Value="0">
            <DataTrigger.EnterActions>
                <BeginStoryboard Name="flash">
                    <Storyboard TargetName="stack" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)">
                        <ColorAnimation From="MediumSpringGreen" To="Crimson" Duration="0:0:0.1" AutoReverse="True" RepeatBehavior="0:0:5"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <RemoveStoryboard BeginStoryboardName="flash"/>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

这是我的警报应用程序中 xaml 的精简版。当滑块的值达到 0 时,会触发 ColorAnimation,它会为包含 Slider 的 StackPanel 的背景设置动画。

但是,当闪烁结束时,我希望背景颜色恢复到以前的值(PaleTurquoise)。如何在 xaml 中完成此操作?

还有一个问题,即使我的 ViewModel 中的 TimeLeft 在初始化时为 0,如何才能让 DataTrigger 在首次加载应用程序时不触发?

【问题讨论】:

    标签: wpf xaml animation storyboard datatrigger


    【解决方案1】:

    最后,我为背景的默认颜色创建了一个 StaticResource,并在第一个颜色动画之后放置了另一个 ColorAnimation:

    <ColorAnimation To="{StaticResource alarmBackgroundColour}" BeginTime="0:0:5"/>
    

    为了回答让触发器在启动时不触发的第二部分,我通过让 ValueConverter 仅在第一次调用时返回 1 来绕过它。

    欢迎任何更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 2014-10-22
      • 2011-02-28
      • 2021-09-28
      • 2019-08-26
      • 2021-11-14
      • 2011-04-16
      • 2020-03-11
      相关资源
      最近更新 更多