在exitaction上动画背景颜色

时间:2012-08-07 10:19:16

标签: wpf xaml

我正在尝试动画网格上的背景颜色来改变,一旦事件发生,但我无法让它工作,我可以让它立即改变颜色(通过数据触发器),但是一旦我尝试在其中引入动画,然后我无法使其工作(动画似乎没有生效)。

这是我正在使用的当前XAML(虽然我尝试了各种变体,但无法将其设置为动画):

<DataTrigger Binding="{Binding ElementName=me, Path=Viewed}" Value="False">
    <Setter Property="Background" Value="LightYellow" />
    <DataTrigger.ExitActions>
        <BeginStoryboard>
            <Storyboard>
                <ColorAnimation Duration="00:00:02" To="White" Storyboard.TargetProperty="(Grid.Background).(SolidColorBrush.Color)"/>
            </Storyboard>
        </BeginStoryboard>
    </DataTrigger.ExitActions>
</DataTrigger>
<!--
<DataTrigger Binding="{Binding ElementName=me, Path=Viewed}" Value="True">
    <Setter Property="Background" Value="White" />
</DataTrigger>
-->

其中Viewed是我的Control上的依赖属性(bool)。任何正确方向的提示都将受到赞赏。我也尝试将它设置为一个引发事件的EventTrigger,当bool切换为true时发生。

2 个答案:

答案 0 :(得分:1)

感谢Clemens的帮助,找出了我需要做的事情:

    <SolidColorBrush x:Key="GridColourBrush" Color="LightYellow" />
        <Style x:Key="GridStyle" TargetType="Grid">
            <Setter Property="Background" Value="White" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=me, Path=Viewed}" Value="False">
                    <Setter Property="Background" Value="{StaticResource GridColourBrush}" />
                    <DataTrigger.ExitActions>
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Duration="00:00:02" To="White" Storyboard.TargetProperty="(Grid.Background).(SolidColorBrush.Color)"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </DataTrigger.ExitActions>
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <!-- snipped stuff -->
        <Grid MinWidth="525" x:Name="ContainerGrid" Style="{StaticResource GridStyle}" Background="{StaticResource GridColourBrush}" />

因此默认情况下将背景设置为白色,然后如果DP bool为false,则将背景更改为静态纯色画笔,然后我可以通过退出操作设置动画。

答案 1 :(得分:0)

我的意思只是代替

<Grid Background="LightYellow">
</Grid>

你必须写

<Grid>
    <Grid.Background>
        <SolidColorBrush Color="LightYellow" />
    </Grid.Background>
</Grid>

无需额外资源。