TextBlock 中 Label 的垂直对齐错误

Vertical alignment of Label inside TextBlock is wrong

在我向用户显示的 WPF 弹出窗口 window 中,我想将绑定到变量的文本放入文本块中。 我试图通过将 <Label> 放在 <TextBlock> 中来做到这一点。 但是,这会导致对齐问题,请参见下面的标记和图片。 我想知道如何让Label中的文字与TextBlock中的文字垂直对齐,或者是否有更好的解决方案?

我可以将整个文本放在一个变量中,但我不知道如何为部分文本设置 <Bold> 格式。

<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap"
 VerticalAlignment="Top" Height="99" Width="339" Grid.RowSpan="3">
    The user is <Bold>responsible</Bold> for 
    <Bold><Label Content="00" Padding="0"/></Bold> vehicles
</TextBlock>

您可以将 Run 内联元素用于数据绑定文本。

Starting in the .NET Framework 4, the Text property of the Run object is a dependency property, which means that you can bind the Text property to a data source.

它还有设置文本样式的属性,例如 FontWeight,这里不需要 <Bold>

<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap"
 VerticalAlignment="Top" Height="99" Width="339" Grid.RowSpan="3">
    The user is <Bold>responsible</Bold> for 
    <Run Text="{Binding YourProperty}" FontWeight="Bold"/> vehicles
</TextBlock>

结果如下所示:


关于这个问题的一般说明:TextBlock 中的元素应该是 inline elements. Here is an article that has links to other inline elements that could be useful to you, like span,允许对其他内联元素进行分组并应用样式。

WPF 有两种基本类型,UIElementContentElementTextBlockLabelUIElement,而 TextBlock 的内容是内联,即 ContentElements。这就是对齐关闭的原因,它们的用途非常不同。您可以在此处阅读更多关于差异和概念的信息:

  • Base Element APIs in WPF Classes
  • UIElement

    UIElement is a base class for WPF core level implementations building on Windows Presentation Foundation (WPF) elements and basic presentation characteristics.

  • ContentElement

    Provides a WPF core-level base class for content elements. Content elements are designed for flow-style presentation, using an intuitive markup-oriented layout model and a deliberately simple object model.

  • Flow Document Overview