: ‘Невозможно анимировать ‘заливку.Color’ на экземпляре неизменяемого объекта. ‘

#c# #wpf #xaml

#c# #wpf #xaml

Вопрос:

Я новичок в WPF, и я пытаюсь анимировать фигуру в «Мигающей красной» цветовой анимации на случай, если я получу какое-то значение триггера. Вот мой соответствующий код XAML:

  <Rectangle  Width="840" Height="40">
                    <Rectangle.Style>
                        <Style TargetType="Rectangle">
                            <Setter Property="Fill" Value="{Binding AlertUnit.AlertColor, FallbackValue=LightPink}"> </Setter>
                       
                            <Style.Triggers>
                                <DataTrigger   Binding="{Binding AlertUnit.AlertString}"  Value="EMERGENCY" >
                                   <DataTrigger.EnterActions>
                                      <BeginStoryboard>
                                          <Storyboard>
                                              <ColorAnimation Storyboard.TargetProperty="Fill.Color" To="White" Duration="0:0:2" AutoReverse="True"
                                                              RepeatBehavior="Forever"></ColorAnimation>
                                          </Storyboard>
                                      </BeginStoryboard>
                                   </DataTrigger.EnterActions>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>
  

Но я получаю следующую ошибку: 'Cannot animate 'Fill.Color' on an immutable object instance.'
Я знаю, что это связано с привязкой к свойству fill, если я изменю его на статический цвет кисти, он будет работать хорошо, но мне нужно, чтобы цвет менялся в соответствии с некоторой логикой, так есть ли какой-нибудь обходной путь для его решения?

Спасибо!

Комментарии:

1. Почему, Storyboard.TargetProperty="Background.Color" когда вы спрашиваете об анимации Fill.Color ?

2. @Clemens моя ошибка, это должна быть раскадровка. TargetProperty=»Заливка. Цвет» Я отредактировал код, фон. Цвет был тем, что я пытался решить эту проблему.

3. Как примечание, AlertColor это странное имя для кисти.

Ответ №1:

Создайте новый SolidColorBrush в качестве значения для параметра настройки заливки:

 <Style TargetType="Rectangle">
    <Setter Property="Fill">
        <Setter.Value>
            <SolidColorBrush Color="{Binding AlertUnit.AlertColor.Color}"/>
        </Setter.Value>
    </Setter>
    ...
</Style>
  

Комментарии:

1. Это работает, большое вам спасибо! Но мне интересно, в чем разница между добавлением SolidColorBrush или просто установкой значения цвета внутри тега Setter?

2. Это создает новый объект кисти, который впоследствии анимируется вместо исходного, который может быть заморожен, т. Е. Неизменяемый.

3. Понял, спасибо!