使用ColorAnimation更改StackPanel背景颜色

lir*_*nxs 3 wpf xaml background stackpanel coloranimation

好吧,我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

没有编译时错误.但是当我运行它时会抛出InvalidOperationException:"'Background'属性不指向路径中的DependencyObject'(0).(1)'."

什么?:d

Phi*_*hil 17

您的代码对我来说非常合适.我只做了一些小修改.

    <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}" />
Run Code Online (Sandbox Code Playgroud)

  • RepeatBehaviour ="4x"将修复它.指定一个数字被解释为TimeSpan,所以你得到的意思是'04:00:00'或'4小时'. (4认同)

ktu*_*nik 11

出于文档目的:

这有点难以使用(Panel.Background).(SolidColorBrush.Color).真正的问题是,ColorAnimation只适用于Color财产,而不是Brush.对我来说这就是诀窍:

定义面板画笔......

<StackPanel Name="SensorPanel" MouseDown="SensorPanel_MouseDown">
    <StackPanel.Background>
        <SolidColorBrush Color="White" x:Name="PanelColor"/>
    </StackPanel.Background>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

...然后动画相反的Color属性SolidColorBrush:

<ColorAnimation 
    Storyboard.TargetName="PanelColor" 
    Storyboard.TargetProperty="Color"
    To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4">
Run Code Online (Sandbox Code Playgroud)