Анимация цвета текста - PullRequest
3 голосов
/ 02 февраля 2011

Мне нужно анимировать цвет текста пользовательского элемента управления между двумя цветами, которые считываются из двух 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 Ответ

9 голосов
/ 02 февраля 2011

Попробовал с помощью привязки, и, кажется, работает так

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>
...