为什么 Arial Black 字体中的文本在其上方的 Run 中特别重叠文本?

问题描述 投票:0回答:2

我遇到了一个文本格式问题,该问题仅适用于 Arial Black 字体的文本。使用具有两个 Run 的 TextBlock,如果上面的文本是 Arial Black,底部的 Run 将与顶部的重叠。特别是第二个 Run 的背景与上面的 Run 重叠。对于任何其他字体,无论我将底部 Run 上的文本设置为多大,都不会重叠。我遇到此问题的项目是使用 .NET Framework 4.8 的 WPF 应用程序。如果需要,我可以添加一段代码来展示我如何设置 TextBlock 的内容。

Screenshot using regular Arial font:

Screenshot using Arial Black font:

我曾尝试让文本与许多不同的字体重叠,但除了 Arial Black 之外,没有一种能做到。我曾尝试在没有设置 Run 背景的情况下使重叠发生,但无法实现,因此 Arial Black 的背景大小似乎与该问题有关。只有使用 Arial Black 文本并在运行元素上设置背景时才会出现此问题。就好像为 Arial Black 确定背景大小的方式已关闭。

在主窗口中设置TextBlock内容的代码:

Run run = new Run("Size 16px______\r\n");
Run run2 = new Run("Size 48px");
//run.FontFamily = new FontFamily("Arial Black");
//run2.FontFamily = new FontFamily("Arial Black");
run.FontFamily = new FontFamily("Arial");
run2.FontFamily = new FontFamily("Arial");
run.FontSize = 16;
run2.FontSize = 48;
Color color = Colors.Red;
run.Background = new SolidColorBrush(color);
run2.Background = new SolidColorBrush(color);
textBlock.Inlines.Add(run);
textBlock.Inlines.Add(run2);

对于MainWindow xaml,需要添加的只是主网格中的TextBlock:

<TextBlock x:Name="textBlock"></TextBlock>

要在 TextBlock 中切换使用 Arial 或 Arial Black,您只需注释或取消注释 run.FontFamily 行即可。

c# .net fonts background
2个回答
0
投票

这并不是真正解决问题的答案,只是展示了如何进一步调查它。但是由于评论太有限,我必须在答案中说明我的解释:-(

有一个有用的工具可用于调查在 VS 中运行的 WPF 应用程序的此类问题。它看起来像这样:

或者,当你这样点击它时:

点击选择元素

单击您的文本块。

点击进入生活视觉树

这将向您显示可视化树及其父级中的 TextBlock:

右键单击,然后单击Show Properties,这将显示实际大小等的值。您还需要查看父级的属性以找出 TextBlock 获得其大小的原因。


0
投票

我想知道为什么你在

Run
中使用
TextBlock
而不是 2 个文本块?

<StackPanel>
  <TextBlock Text="Size 16px______" FontFamily="Arial" FontSize="16" Background="Red"/>
  <TextBlock Text="Size 48px______" FontFamily="Arial" FontSize="48" Background="Orange"/>
  <TextBlock Text="Size 16px______" FontFamily="Arial Black" FontSize="16" Background="Yellow"/>
  <TextBlock Text="Size 48px______" FontFamily="Arial Black" FontSize="48" Background="GreenYellow"/>
</StackPanel>

这正常工作。如果您需要更复杂的 TextBlocks 排列,您可以使用

Grid
,并且可以在代码隐藏中创建它们。

老实说,使用Runs的人并不多,这意味着可能也没有多少人了解

TextBlock
如何布局其内容的细节。例如,我不知道您发现的是 WPF 错误还是
TextBlock
布局的“特殊功能”。

© www.soinside.com 2019 - 2024. All rights reserved.