动画文字颜色

时间:2011-02-02 17:33:34

标签: wpf user-controls wpf-controls

我需要为两种颜色之间的自定义控件的文本颜色设置动画,这两种颜色是从自定义控件的两个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的最佳实践吗?

- 最后,我走向正确的道路,还是有一个更简单的解决方案来解决这个问题?

感谢您的帮助。

1 个答案:

答案 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>