WPF TextBlock中的文本垂直对齐方式

Ant*_*Ant 219 wpf textblock vertical-alignment

如何为TextBlock中的文本指定垂直居中对齐?我找到了TextAlignment属性,但它用于水平文本对齐.如何进行垂直文本对齐?

Ori*_*rds 274

Textblock本身不能进行垂直对齐

我发现这样做的最好方法是将文本块放在边框内,这样边框就可以为你做对齐.

<Border BorderBrush="{x:Null}" Height="50">
    <TextBlock TextWrapping="Wrap" Text="Some Text" VerticalAlignment="Center"/>
</Border>
Run Code Online (Sandbox Code Playgroud)

注意:这在功能上等同于使用网格,它只取决于您希望控件如何适应布局的其余部分,哪一个更适合

  • +1必须设置边框的高度才能使垂直对齐生效. (22认同)
  • 此外,TextBlock不能指定高度,或者不会垂直居中. (21认同)
  • @gav - TextAlignment仅进行水平对齐...问题是关于垂直对齐 (20认同)

Ben*_*nes 96

虽然Orion Edwards Answer适用于任何情况,但每次要执行此操作时添加边框并设置边框属性可能会很麻烦.另一种快速方法是设置文本块的填充:

<TextBlock Height="22" Padding="3" />
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是最精彩的答案. (11认同)
  • 仅当字体大小为 16px 时才有效,不是吗!? (2认同)
  • 接受的答案将正确垂直对齐文本框的实际边框,但它似乎不会对其中的实际文本产生影响......我很确定这是OP的意图。该解决方案可以代替适当的 TextVerticalAlignment 属性,并得到我的支持。:) (2认同)
  • 块内的动态内容怎么样,2 或 5 行不需要不同的填充,还有 10pt 和 24pt 字体 (2认同)

hwi*_*ers 51

TextBlock不支持垂直文本对齐.

我通过使用Grid包装文本块并设置Horizo​​ntalAlignment ="Stretch"和VerticalAlignment ="Center"来解决此问题.

像这样:

    <Grid>
        <TextBlock 
            HorizontalAlignment="Stretch"
            VerticalAlignment="Center"
            Text="Your text" />
    </Grid>
Run Code Online (Sandbox Code Playgroud)


Ane*_*iel 15

您可以使用label而不是textblock.

<Label Content="Hello, World!">
    <Label.LayoutTransform>
        <RotateTransform Angle="270"/>
    </Label.LayoutTransform>
</Label>
Run Code Online (Sandbox Code Playgroud)

  • 这个问题正在讨论元:http://meta.stackoverflow.com/questions/305572/is-there-some-backstory-to-this-highly-upvoted-wrong-answer?cb=1 (26认同)
  • 这回答了如何生成垂直文本的问题,而不是如何应用垂直对齐! (18认同)
  • 很好,Label有VerticalContentAlignment.Greeeat.+1 (3认同)
  • 不清楚OP是否需要使用TextBlock或者是否可以使用Label.使用标签可以满足我的需要.+1 (3认同)

Mik*_*chs 7

如果您可以不用文本换行,我认为将 TextBlock 替换为 Label 是最简洁的方法。否则,请遵循其他有效答案之一。

<Label Content="Some Text" VerticalAlignment="Center"/>
Run Code Online (Sandbox Code Playgroud)


Dre*_*kes 5

TextBlock不支持其内容的垂直对齐。如果必须使用,TextBlock则必须使其相对于其父对象对齐。

但是,如果可以Label代替使用(它们确实具有非常相似的功能),则可以放置文本内容:

<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
   I am centred text!
</Label>
Run Code Online (Sandbox Code Playgroud)

Label将伸展在默认情况下,以填补其边界,这意味着该标签的文本将居中。