我如何分配垂直中心对齐到文本块内的文本?我发现TextAlignment属性,但它是水平文本对齐。我怎么做垂直文本对齐?


当前回答

我发现修改文本框的样式(即:controltemplate),然后修改part_contentthost垂直对齐到中心将做的技巧

其他回答

虽然Orion Edwards Answer适用于任何情况,但每次想要这样做时,添加边界和设置边界的属性可能是一件痛苦的事情。另一个快速的方法是设置文本块的填充:

<TextBlock Height="22" Padding="3" />

TextBlock不支持其内容的垂直对齐。如果你必须使用TextBlock,那么你必须对齐它与它的父。

然而,如果你可以使用标签代替(他们确实有非常相似的功能),那么你可以定位文本内容:

<Label VerticalContentAlignment="Center" HorizontalContentAlignment="Center">
   I am centred text!
</Label>

默认情况下,标签将拉伸以填充其边界,这意味着标签的文本将居中。

我认为这是明智的使用一个没有边界和背景的文本框作为一个简单而快速的方式,以达到中心对齐的文本块

<TextBox
TextWrapping="Wrap"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Background="{x:Null}"
BorderBrush="{x:Null}"
/>

在我的情况下,我这样做是为了使TextBlock显示更好。

<Border BorderThickness="3" BorderBrush="Yellow" CornerRadius="10" Padding="2"
    HorizontalAlignment="Center" VerticalAlignment="Center" Height="30" Width="150">
        <TextBlock FontSize="20" Height="23" HorizontalAlignment="Left" Margin="0,0,0,-5" Text="" VerticalAlignment="Top" Width="141" Background="White" />
</Border>

使文本离底部更远的技巧是设置

Margin="0,0,0,-5"

我认为最好是使用一个标签(或TextBlock)变成一个标签,你不能直接在边界控件中附加鼠标事件,最后它附加在TextBlock中,这是我的建议:

<Label 
    Height="32"
    VerticalContentAlignment="Center"
    HorizontalContentAlignment="Stretch"
    MouseLeftButtonUp="MenuItem_MouseLeftButtonUp">
    <TextBlock Padding="32 0 10 0">
        Label with click event
    </TextBlock>
</Label>