WPF Textblock в 2 слоя

Я наложил один Textblock поверх другого для создания нужной мне анимации, но заметил что края нижнего чуть видно из под верхнего:

введите сюда описание изображения

Вот так выглядит нижний слой:

введите сюда описание изображения

Это выделение абсолютно все портит, можно ли от него как-нибудь избавиться?

Код:

    <TextBlock FontSize="120"
               Width="255"
               Height="95"
               x:Name="Serv1"
               FontFamily="Fonts/#TT Commons Bold"
               Margin="80,217,0,0"
               HorizontalAlignment="Left"
               VerticalAlignment="Top">
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
                <GradientStop Color="#FF7C127B" Offset="0"/>
                <GradientStop Color="#FF482A7B" Offset="1"/>
            </LinearGradientBrush>
        </TextBlock.Foreground>
        So
    </TextBlock>
    <TextBlock Width="{Binding ElementName=Serv1, Path=Width}"
               Height="{Binding ElementName=Serv1, Path=Height}"
               FontSize="{Binding ElementName=Serv1, Path=FontSize}" 
               FontFamily="{Binding ElementName=Serv1, Path=FontFamily}"
               Text="{Binding ElementName=Serv1, Path=Text}"
               Margin="{Binding ElementName=Serv1, Path=Margin}" 
               HorizontalAlignment="Left"
               VerticalAlignment="Top">
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop x:Name="WhiteOffset" Color="#211e23"/>
                <GradientStop x:Name="GrayOffset" Color="Transparent"/>
            </LinearGradientBrush>
        </TextBlock.Foreground>
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetProperty="Offset">
                        <DoubleAnimation Storyboard.TargetName="WhiteOffset" From="1" To="0.5" Duration="0:0:0.5"/>
                        <DoubleAnimation Storyboard.TargetName="GrayOffset" From="1" To="0.5" Duration="0:0:0.5"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
    </TextBlock>

Ответы (1 шт):

Автор решения: aepot

Вам не нужно наложение двух TextBlock. Достаточно поместить текст в Grid с OpacityMask, определяемую градиентом заливки, и анимировать этот градиент.

Как-то так у меня получилось:

<Grid HorizontalAlignment="Left" VerticalAlignment="Top" Margin="5">
    <Grid.OpacityMask>
        <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
            <GradientStop x:Name="GradientMask" Offset="0.5" Color="Transparent" />
            <GradientStop Offset="{Binding Offset, ElementName=GradientMask}" Color="White" />
        </LinearGradientBrush>
    </Grid.OpacityMask>
    <TextBlock FontSize="120" FontFamily="Fonts/#TT Commons Bold" Text="So">
        <TextBlock.Foreground>
            <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
                <GradientStop Color="#FF7C127B" Offset="0"/>
                <GradientStop Color="#FF482A7B" Offset="1"/>
            </LinearGradientBrush>
        </TextBlock.Foreground>
        <TextBlock.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard Storyboard.TargetProperty="Offset">
                        <DoubleAnimation Storyboard.TargetName="GradientMask" From="1" To="0" Duration="0:0:1"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
    </TextBlock>
</Grid>

введите сюда описание изображения

→ Ссылка