我遇到了一个文本格式问题,该问题仅适用于 Arial Black 字体的文本。使用具有两个 Run 的 TextBlock,如果上面的文本是 Arial Black,底部的 Run 将与顶部的重叠。特别是第二个 Run 的背景与上面的 Run 重叠。对于任何其他字体,无论我将底部 Run 上的文本设置为多大,都不会重叠。我遇到此问题的项目是使用 .NET Framework 4.8 的 WPF 应用程序。如果需要,我可以添加一段代码来展示我如何设置 TextBlock 的内容。
我曾尝试让文本与许多不同的字体重叠,但除了 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 行即可。
我想知道为什么你在
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
布局的“特殊功能”。