如何在 WPF TextBlock 中更改文本装饰线的颜色?

9
我这样改变 TextDecoration 的颜色:
<Grid Background="{x:Null}"
      Margin="10,0,10,0">
    <TextBlock Text="{Binding Value}"
               VerticalAlignment="Center"
               HorizontalAlignment="Center"
               Style="{StaticResource SWMRegularTextBlockStyle}"
               Margin="0"
               FontSize="{DynamicResource RegularFontSize}"
               x:Name="tb" />
        <Line VerticalAlignment="Center"
              HorizontalAlignment="Center"
              Visibility="{Binding InStock, Converter={StaticResource ReverseBooleanToVisiblity}}"
              Stroke="Red"
              Margin="0"
              StrokeThickness="2"
              X1="1"
              Stretch="Fill"
              Width="{Binding ActualWidth, ElementName=tb, UpdateSourceTrigger=PropertyChanged}" />
</Grid>

但是当Text有两行时,它会失败。请帮我改变TextDecoration的颜色。 提前致谢。

注意:我希望TextBlock的前景色和删除线颜色不同。

2个回答

22

我想这就是你要找的。

<TextBlock Text="{Binding Value}" VerticalAlignment="Center" HorizontalAlignment="Center" Style="{StaticResource  SWMRegularTextBlockStyle}" Margin="0" FontSize="{DynamicResource RegularFontSize}" x:Name="tb" >
   <TextBlock.TextDecorations>
        <TextDecoration Location="Strikethrough">
            <TextDecoration.Pen>
                <Pen Brush="Red" />
            </TextDecoration.Pen>
        </TextDecoration>
    </TextBlock.TextDecorations>
</TextBlock>

正是我刚才搜索的内容。 - Даниил Пронин

3
您遇到的问题是您正在文本上叠加一条线。当文本换行时,您需要创建另一条线,这并不容易。
您可以通过在代码后台中使用特定笔来解决此问题,而不是使用线条的TextDecoration进行删除线。
详见此处的答案。
    private void WindowLoaded(object sender, EventArgs e)
    {
        // Fill the overline decoration with a solid color brush.
        TextDecorationCollection myCollection = new TextDecorationCollection();
        TextDecoration myStrikeThrough = new TextDecoration();
        myStrikeThrough.Location = TextDecorationLocation.Strikethrough;

        // Set the solid color brush.
        myStrikeThrough.Pen = new Pen(Brushes.Red, 2);
        myStrikeThrough.PenThicknessUnit = TextDecorationUnit.FontRecommended;

        // Set the underline decoration to the text block.
        myCollection.Add(myStrikeThrough);
        tb.TextDecorations = myCollection;
    }

然后简化你的XAML。删除Line控件,并将Loaded="WindowLoaded"添加到你的窗口中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接