我需要为两种颜色之间的自定义控件的文本颜色设置动画,这两种颜色是从自定义控件的两个Brush
属性中读取的。我的资源看起来像这样:
<SolidColorBrush x:Key="TextBrush">{TemplateBinding Foreground}</SolidColorBrush>
<SolidColorBrush x:Key="AltTextBrush">{TemplateBinding ForegroundAlt}</SolidColorBrush>
现在,我正在尝试使用ColorAnimation进行动画处理:
<ColorAnimation Storyboard.TargetName="MyControlText" Storyboard.TargetProperty="Foreground" To="{StaticResource AltTextBrush}" Duration="00:00:00.3000000" />
ColorAnimation似乎想要一个Color
对象,而不是我想要传递的Brush
。我想我可以写一个IValueConverter
来获取画笔的颜色,但在我这样做之前,我想看看是否有更简单的方法来完成这项工作。以下是我的问题:
- 是否有一种简单的方法可以在两个画笔资源之间进行动画处理,还是需要为动画提取颜色?
- 如果我需要提取颜色,是IValueConverter的最佳实践吗?
- 最后,我走向正确的道路,还是有一个更简单的解决方案来解决这个问题?
感谢您的帮助。
答案 0 :(得分:9)
尝试使用绑定,它似乎像这样工作
To="{Binding Source={StaticResource TextBrush}, Path=Color}"
这是 xaml 示例
<Window.Resources>
<SolidColorBrush x:Key="TextBrush">Black</SolidColorBrush>
<Storyboard x:Key="blinkAnimation" Duration="0:0:5" >
<ColorAnimation Storyboard.TargetProperty="(TextBlock.Foreground).(SolidColorBrush.Color)"
Storyboard.TargetName="TitleTextBlock"
To="{Binding Source={StaticResource TextBrush}, Path=Color}"
AutoReverse="True"
Duration="0:0:2"/>
</Storyboard>
</Window.Resources>
<Grid Background="Black" Name="grid">
<TextBlock x:Name="TitleTextBlock"
Background="Black"
Text="My Text"
FontSize="32"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Foreground="White">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<StaticResource ResourceKey="blinkAnimation"/>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</Grid>