Я пытаюсь программным образом инициировать цветную анимацию на кнопке, но получаю System.InvalidOperationException
, когда я это делаю. Кажется, он не может разрешить TargetProperty
, потому что я создал кнопку, используя презентатор шаблона/контента.InvalidOperationException при попытке оживить цвет фона стилизованной кнопки в WPF
Причина, по которой я придерживаюсь стиля <Button>
, заключается в том, чтобы заставить стиль быть последовательным (и избегать эффекта синего наведения по умолчанию). У меня также есть DataTrigger, который анимирует цвет фона этой кнопки всякий раз, когда он отображается (т. Е. Сделал видимым). Вот полный <Style>
определение:
<Style x:Key="PopUnder" TargetType="Button">
<Setter Property="Foreground" Value="Black" />
<Setter Property="FontSize" Value="34" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="Border" Background="White" BorderBrush="Red" BorderThickness="0,1,0,1">
<TextBlock TextWrapping="Wrap" TextAlignment="Center" VerticalAlignment="Center" LineStackingStrategy="BlockLineHeight" LineHeight="40" Text="{TemplateBinding Content}" />
</Border>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=Visibility}" Value="Visible">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)" RepeatBehavior="Forever">
<LinearColorKeyFrame Value="White" KeyTime="0:0:0" />
<LinearColorKeyFrame Value="LightCoral" KeyTime="0:0:1" />
<LinearColorKeyFrame Value="White" KeyTime="0:0:2" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Но я также хочу, чтобы иметь возможность запускать различные анимации на этой же кнопке, с помощью кода. Поэтому у меня есть отдельный <Storyboard>
, определенный в другом месте (вне определения стиля), который я запускаю с использованием TryFindResource()
... Begin()
. Однако, поскольку кнопка использует шаблон, у меня возникла проблема с тем, чтобы свойство цвета фона было правильно разрешено в моем XAML (см. Ниже).
<Storyboard x:Key="StatusGood" Completed="AnimationStatusGood_Completed">
<ColorAnimationUsingKeyFrames Storyboard.TargetName="PopUnderMessage" Storyboard.TargetProperty="(Border).(Background).(SolidColorBrush.Color)">
<LinearColorKeyFrame Value="LightGreen" KeyTime="0:0:0" />
<LinearColorKeyFrame Value="White" KeyTime="0:0:1" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
Я пытался несколько различных значений для атрибута Storyboard.TargetProperty
здесь:
- (Background) (SolidColorBrush.Color)
- (Border) (Background) (SolidColorBrush... .Color)
- (Border.Background). (SolidColorBrush.Color)
Но все они дают разные вариацией ns при одном и том же исключении. Я признаюсь, что я как бы бросаю дротики на доске слепо, так как мне не хватает знаний о шаблонах XAML и дорожках свойств. Как я могу заставить это работать?