У меня есть набор элементов управления (Button, ToggleButton). Я хочу иметь один и тот же стиль, поэтому я создал несколько градиентных кистей для нормальных / отключенных / включенных состояний в моем ResourceDictionary, например, «ButtonFillBrush», «ButtonFillMouseOverBrush» и т. Д.Они определены как глобальные многократно используемые ресурсы кисти.
Я знаю, что возможно изменить отдельные остановки градиента в анимации внутри состояния, например:
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="#FF041D06" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="path" d:IsOptimized="True"/>
<ColorAnimation Duration="0" To="#FF118519" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)" Storyboard.TargetName="backgroundRectangle" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
Теперь язнаю, что в VisualState Manager можно сделать что-то вроде:
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Duration="0" To="ButtonFillMouseOverBrush" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush)" Storyboard.TargetName="backgroundRectangle" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
Спасибо!
Обновление : использование ответа об обращении со StaticResource и некоторых другихsearch: http://wildermuth.com/2008/07/18/Animating_Brushes_with_ObjectAnimationUsingKeyFrames
<VisualState x:Name="MouseOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="backgroundRectangle"
Storyboard.TargetProperty="Fill">
<DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{StaticResource ButtonFillMouseOverBrush}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
Итак, было бы неплохо иметь BrushAnimation или что-то в этом роде ...
Rogier