【问题标题】:Multi-line padded text in WPFWPF中的多行填充文本
【发布时间】:2015-07-21 09:55:34
【问题描述】:

我正在尝试在 WPF 中实现矩形阴影效果,如下所示: https://css-tricks.com/multi-line-padded-text/

阴影应该跟在每一行文本之后,但行与行之间不应有空格。此外,阴影将具有一定的透明度,这排除了为内联运行添加单独的背景。我试过了,阴影与不透明度值重叠的地方形成了更深的颜色。

到目前为止,我已经研究过 TextBox、TextBlock 和 RichTextBox。我尝试更改 Run.Background,或选择文本并更改选择前景/背景。如果没有成功,这些都不能完全满足我的需要。

基本上(我认为)我需要的是一个文本格式化功能,它允许我从内存中的字符串创建一个正确包装的文本,每一行都有单独的运行。在此之后,我可以找出每个 Run 的像素长度,手动将这些 Run 添加到 RichTextBox 或 TextBlock 中,并在它们后面手动创建矩形。 不幸的是,当我将文本添加到 TextBlock 或 RichTextBox 时,换行会应用到 Run 本身,而不是为每个换行的行创建单独的 Run。

【问题讨论】:

    标签: c# wpf shadow text-formatting


    【解决方案1】:

    我没有收到任何回复,所以我正在尝试回答我自己的问题。 我对 TextBlock 的主要问题是,如果我向内联 Run 对象添加稍微透明的背景颜色,它们会形成较暗的颜色,因为线条略有重叠。为了克服这个问题,我将运行背景更改为不透明,这样 100% 的不透明度值不会导致明显重叠的线条。然后我将整个 TextBlock 的不透明度更改为 80% - 我得到了我预期的结果。

    这是一个示例 xaml:

    <TextBlock TextWrapping="Wrap" FontWeight="SemiBold" FontSize="23" FontFamily="Arial" TextBlock.LineHeight="24.65" 
                TextOptions.TextFormattingMode="Ideal"  TextTrimming="CharacterEllipsis" LineStackingStrategy="BlockLineHeight"  Opacity="0.8">
        <Run Background="#FFFF0000" Text="This text here" />
        <Run Background="#FFFF0000" Text="will be visible across" />
        <Run Background="#FFFF0000" Text="multiple lines" />
    </TextBlock>
    

    请注意 LineHeight 值略高于 FontSize 值。这样可以确保线条之间没有可见的间隙。

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多