【问题标题】:How to change TextDecoration color in WPF TextBlock?如何更改 WPF TextBlock 中的 TextDecoration 颜色?
【发布时间】:2015-12-11 18:39:13
【问题描述】:

我正在以这种方式更改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 前景和删除线。

【问题讨论】:

    标签: c# wpf textblock text-decorations


    【解决方案1】:

    我想这就是你要找的。​​p>

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

    【讨论】:

    • 正是我刚刚搜索的内容。
    【解决方案2】:

    您遇到的问题是您在文本上覆盖了一条线。当文本换行时,您需要创建另一行,这并不容易。

    您可以通过完全不使用该行来解决此问题,而是使用特定的笔在后面的代码中删除删除线的 TextDecoration。

    Answer found here

        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" 添加到您的窗口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多