在TextBlock上设置叠加颜色的动画

时间:2012-05-31 21:38:59

标签: wpf xaml animation text

我正在尝试提出一种创造性的解决方案来实现这一特殊效果:

我最初的想法:具有色度键着色器效果的动态大小的矩形将在文本上滑动到位。但是,我不想破坏着色器往往会出现文本边缘的保真度。

我还考虑使用FormattedText类,但我不确定它是否支持我正在尝试做的事情。

有什么建议吗?

修改的 为了澄清,该文本基本上是一个'TabItem'。我希望突出显示的块可以跨所有选项卡项浮动到所选项。它们目前在Canvas中布局,逻辑处理它们的位置。一个简单的动画似乎不够。

1 个答案:

答案 0 :(得分:3)

这应该会给你你想要的效果。这使用渐变画笔作为颜色,但它使用3个渐变色标来确保颜色从一个到另一个立即变化而中间没有渐变。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:TestingWPF"
    mc:Ignorable="d"
    x:Class="TestingWPF.TestWindow"
    d:DesignWidth="477" d:DesignHeight="214"
    Background="Black">

    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="74" FontWeight="Bold">
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                <GradientStop Color="White" Offset="0"/>
                <GradientStop x:Name="WhiteOffset" Color="White" Offset="1"/>
                <GradientStop x:Name="GrayOffset" Color="Gray" Offset="1"/>
            </LinearGradientBrush>
        </TextBlock.Foreground>
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetProperty="Offset" Duration="0:0:1" RepeatBehavior="Forever">
                        <DoubleAnimation Storyboard.TargetName="WhiteOffset" From="0" To="1" />
                        <DoubleAnimation Storyboard.TargetName="GrayOffset" From="0" To="1" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
        Some Text
    </TextBlock>
</Window>