Изменение цвета фона StackPanel с помощью ColorAnimation - PullRequest
3 голосов
/ 17 марта 2012

Я пытаюсь изменить цвет фона StackPanel в шаблоне данных с помощью ColorAnimation:

    <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 »не указывает на DependencyObject in path» (0). (1) '. "

Что?: D

Ответы [ 2 ]

17 голосов
/ 17 марта 2012

Ваш код отлично сработал для меня.Я только что сделал небольшие изменения.

    <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}" />
11 голосов
/ 06 июля 2012

Для документации:

Немного сложно использовать (Panel.Background).(SolidColorBrush.Color). Реальная проблема в том, что ColorAnimation работает только для свойства Color, а не Brush. Для меня это трюк:

Определите вашу кисть панели ...

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

... затем анимируйте свойство Color SolidColorBrush вместо:

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