Wpf 使用ColorAnimation更改StackPanel背景色

Wpf 使用ColorAnimation更改StackPanel背景色,wpf,xaml,background,stackpanel,coloranimation,Wpf,Xaml,Background,Stackpanel,Coloranimation,我正在尝试使用ColorAnimation更改DataTemplate中StackPanel的背景色: <DataTemplate DataType="{x:Type logic:Sensor}"> <StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown"> </StackPanel> <DataTemplate.Trigger

我正在尝试使用ColorAnimation更改DataTemplate中StackPanel的背景色:

    <DataTemplate DataType="{x:Type logic:Sensor}">
        <StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown">
        </StackPanel>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Status}" Value="0">
                <!--<Setter TargetName="SensorPanel" Property="Background" Value="LawnGreen" />-->

                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation 
                                Storyboard.TargetName="SensorPanel" 
                                Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
                                To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4">
                            </ColorAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>

            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

没有编译时错误。但当我运行此操作时,会引发InvalidOperationException:“'Background'属性未指向路径(0)。(1)”中的DependencyObject。”


什么你的代码对我来说非常有效。我只是做了一些小修改

    <DataTemplate DataType="{x:Type Model:Sensor}">
        <StackPanel Name="SensorPanel" Background="LightBlue" Width="100" Margin="5">
            <TextBlock Text="{Binding Name}"/>
            <ToggleButton Margin="2" IsChecked="{Binding IsChecked}" Content="Set status=0" />
        </StackPanel>
      <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Status}" Value="0">
                <!--<Setter TargetName="SensorPanel" Property="Background" Value="LawnGreen" />-->

                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation 
                            Storyboard.TargetName="SensorPanel" 
                            Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
                            To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4">
                            </ColorAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>

            </DataTrigger>
        </DataTemplate.Triggers>
    </DataTemplate>

    <ListBox ItemsSource="{Binding Sensors}" />

出于文档目的:

使用
(Panel.Background)。(SolidColorBrush.Color)
有点困难。真正的问题是
ColorAnimation
仅适用于
Color
属性,而不是
Brush
。对我来说,这就是诀窍:

定义面板笔刷

<StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown">
    <StackPanel.Background>
        <SolidColorBrush Color="White" x:Name="PanelColor"/>
    </StackPanel.Background>
</StackPanel>

谢谢,但是它应该永远重复吗?因为确实如此(RepeatBehavior=“4x”将修复此问题。指定一个数字将被解释为时间跨度,因此您所拥有的意味着“04:00:00”或“4小时”。您可能会看到此链接,因为它与您的问题类似。
<ColorAnimation 
    Storyboard.TargetName="PanelColor" 
    Storyboard.TargetProperty="Color"
    To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4">