动画网格背景颜色

时间:2016-08-29 08:47:00

标签: wpf animation mvvm

如果条件为真,我想通过绑定更改网格背景 我正在使用MVVM light framework

<Grid.Style>
    <Style TargetType="Grid">
      <Style.Triggers>
        <DataTrigger Binding="{Binding SuccessBooked, UpdateSourceTrigger=PropertyChanged}"
                     Value="True">
          <!--Setter Property="Background" Value="LimeGreen" />-->
          <DataTrigger.EnterActions>
            <BeginStoryboard>
              <Storyboard>
                <ColorAnimation To="LimeGreen" 
                            Storyboard.TargetName="ActualWeightBg"
                            Storyboard.TargetProperty="Background" 
                            FillBehavior="Stop" 
                            Duration="0:0:12"/>
                <!--<DoubleAnimation Storyboard.TargetProperty="Opacity"
                     From="0.0" To="1.0" Duration="0:0:15"/>-->
              </Storyboard>
            </BeginStoryboard>
          </DataTrigger.EnterActions>
        </DataTrigger>
        <DataTrigger Binding="{Binding LowerBooked, UpdateSourceTrigger=PropertyChanged}"
                     Value="True">
          <Setter Property="Background" Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding HigherBooked, UpdateSourceTrigger=PropertyChanged}"
                     Value="True">
          <Setter Property="Background" Value="DarkOrange" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
</Grid.Style>

编译器抱怨:

enter image description here

如果我删除Storyboard.TargetName="ActualWeightBg"

<ColorAnimation To="LimeGreen"
   Storyboard.TargetProperty="Background" 
   FillBehavior="Stop" 
   Duration="0:0:12"/>

我得到了这个例外:

  

抛出异常:&#39; System.InvalidOperationException&#39;在PresentationFramework.dll

我希望背景颜色会改变5秒,然后它会变回标准颜色。

更新
因此,如果未设置背景颜色,则会抛出错误:

  

无法解析属性路径中的所有属性引用   &#39; Background.Color&#39 ;.验证适用的对象是否支持   属性。

如您所见,未设置背景颜色 enter image description here

然后会发生错误:
enter image description here

但是当背景设定时:
enter image description here

然后它将按预期工作。

如何设置动画背景颜色,而不设置背景颜色。 这是一个用户控件。

1 个答案:

答案 0 :(得分:5)

首先,StyleTriggers通常不支持TargetNames。

仅AFAIK TemplateTriggers支持它们。

您的DataTrigger应如下所示。

<DataTrigger.EnterActions>
    <BeginStoryboard>
        <Storyboard>
            <ColorAnimation Storyboard.TargetProperty="Background.Color" To="LimeGreen" 
              FillBehavior="Stop" AutoReverse="True" Duration="0:0:5" />    
        </Storyboard>
    </BeginStoryboard>
</DataTrigger.EnterActions>

注意Storyboard.TargetProperty="Background.Color"。你的TimeSpan太高了。另一件事是将AutoReverse设置为true。

修改

要使此Trigger工作,在Grid的样式中有一个初始背景设置。

<Style TargetType="Grid">
       <Setter Property="Background" Value="Red"/>