我正在尝试在WPF中实现矩形阴影效果,如下所示: https://css-tricks.com/multi-line-padded-text/
阴影应该跟随每行文本,但它们之间不应该有空格。此外,阴影将具有一些透明度,这排除了向内联运行添加单独的背景。我尝试了这个,并且在阴影重叠的地方,不透明度值形成了更暗的颜色。
到目前为止,我已调查过TextBox,TextBlock和RichTextBox。我尝试更改Run.Background,或选择文本并更改选择前景/背景。没有成功,这些都没有完全符合我的需要。
基本上(我认为)我需要的是一个文本格式化功能,它允许我从IN MEMORY字符串创建一个正确包装的文本,每行都有单独的运行。在此之后,我可以找到每个Run的像素长度,手动将这些运行添加到RichTextBox或TextBlock,并在其后面手动创建矩形。 不幸的是,当我向TextBlock或RichTextBox添加文本时,包装将应用于Run本身,而不是为每个包装行创建单独的运行。
答案 0 :(得分: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值。这确保了线之间没有可见的间隙。