4 Stimmen

Ändern der StackPanel-Hintergrundfarbe mit ColorAnimation

Nun, ich versuche, die Hintergrundfarbe eines StackPanel in einem DataTemplate mit ColorAnimation zu ändern:

    <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>

Keine Kompilierzeit-Fehler. Aber wenn ich dies ausführe, wird eine InvalidOperationException ausgelöst: "'Background' property does not point to a DependencyObject in path '(0).(1)'".

Was? :D

18voto

Phil Punkte 40767

Ihr Code hat bei mir perfekt funktioniert. Ich habe nur kleine Änderungen vorgenommen.

    <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}" />

12voto

ktutnik Punkte 5742

Zu Dokumentationszwecken:

Es ist ein wenig schwer zu benutzen (Panel.Background).(SolidColorBrush.Color) . Das eigentliche Problem ist, dass ColorAnimation funktioniert nur für die Color Eigenschaft, statt Brush . Für mich ist das der Trick:

Definieren Sie Ihren Panelpinsel...

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

...dann animieren Sie die Color Eigenschaft von SolidColorBrush stattdessen:

<ColorAnimation 
    Storyboard.TargetName="PanelColor" 
    Storyboard.TargetProperty="Color"
    To="LawnGreen" Duration="0:0:0.25" AutoReverse="True" RepeatBehavior="4">

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X