动画文字颜色

Dav*_*man 3 wpf user-controls wpf-controls

我需要为两种颜色之间的自定义控件的文本颜色设置动画,这两种颜色是从Brush自定义控件的两个属性中读取的.我的资源看起来像这样:

<SolidColorBrush x:Key="TextBrush">{TemplateBinding Foreground}</SolidColorBrush>
<SolidColorBrush x:Key="AltTextBrush">{TemplateBinding ForegroundAlt}</SolidColorBrush>
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试使用ColorAnimation进行动画制作:

<ColorAnimation Storyboard.TargetName="MyControlText" Storyboard.TargetProperty="Foreground" To="{StaticResource AltTextBrush}" Duration="00:00:00.3000000" />
Run Code Online (Sandbox Code Playgroud)

ColorAnimation似乎想要一个Color对象,而不是Brush我想要传递的对象.我想我可以写一个IValueConverter从画笔中获取颜色,但在我这样做之前,我想看看是否有更简单的方法来完成这项工作.这是我的问题:

- 是否有一种简单的方法可以在两个画笔资源之间设置动画,或者我是否需要提取动画的颜色?

- 如果我需要提取颜色,是IValueConverter的最佳实践吗?

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

谢谢你的帮助.

Fre*_*lad 10

尝试使用绑定,它似乎是这样工作

To="{Binding Source={StaticResource TextBrush}, Path=Color}"
Run Code Online (Sandbox Code Playgroud)

这是一个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>
Run Code Online (Sandbox Code Playgroud)

  • 对于研究此问题的其他人:除了控件模板内外,上述解决方案无处不在.您无法在控件模板中的动画中设置绑定.请参阅:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9336022f-badb-4b40-a86c-a50ab1a64ba5/ (5认同)