Есть кастомный компонент со свойством BackgroundMouseOver. Цвет фона кнопки должен измениться на эту кисть при изменении стейта компонента.
class CustomButton : Button
{
readonly static Color _defaultBackgroundMouseOverColor = Color.FromRgb(255, 0, 255);
static CustomButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomButton), new FrameworkPropertyMetadata(typeof(CustomButton)));
}
#region BackgroundMouseOver
public SolidColorBrush BackgroundMouseOver
{
get => (SolidColorBrush)GetValue(BackgroundMouseOverProperty);
set => SetValue(BackgroundMouseOverProperty, value);
}
public static readonly DependencyProperty BackgroundMouseOverProperty = DependencyProperty.Register(
nameof(BackgroundMouseOver),
typeof(SolidColorBrush),
typeof(CustomButton),
new PropertyMetadata(new SolidColorBrush(_defaultBackgroundMouseOverColor))
);
#endregion
}
Переопределил шаблон компонента и пробую анимировать это свойство:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestApp_VSM">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<SolidColorBrush x:Key="MouseOverBrush" Color="Brown"/>
<Color x:Key="MouseOverColor">Brown</Color>
<local:SolidColorBrushToColorConverter x:Key="solidColorBrushToColorConverter"/>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type local:CustomButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomButton}">
<Border x:Name="buttonBorderColor" Background="{TemplateBinding BackgroundNormal}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="CommonStates">
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color" To="{Binding BackgroundMouseOver.Color, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}" Duration="0:0:0.1">
</ColorAnimation>
</Storyboard>
</VisualState>
<VisualState x:Name="Normal"/>
<VisualState x:Name="Pressed"/>
<VisualState x:Name="Disabled"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Ничего не происходит. Но если указать цвет явно, все работает:
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Color" To="{StaticResource MouseOverColor}" Duration="0:0:0.1"/>
</Storyboard>
Почему анимация не получает значение цвета из BackgroundMouseOver?