12

在以下 XAML 中,单词“Test”水平居中但不垂直居中。

我怎样才能让它垂直居中?

<Window x:Class="TestVerticalAlign2343.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
    Title="Window1" Height="768" Width="1024">
    <DockPanel LastChildFill="True">
        <Slider x:Name="TheSlider"
                DockPanel.Dock="Left"
                Orientation="Vertical"
                HorizontalAlignment="Center"
                HorizontalContentAlignment="Center"
                Minimum="0"
                Maximum="10"
                Cursor="Hand"
                Value="{Binding CurrentSliderValue}"
                IsDirectionReversed="True"
                IsSnapToTickEnabled="True"
                Margin="10 10 0 10"/>
        <Border DockPanel.Dock="Right" Background="Beige"
                Padding="10"
                Margin="10"
                CornerRadius="5">
            <StackPanel Height="700">
                <TextBlock
                    Text="Test"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    FontSize="200" x:Name="TheNumber"/>

            </StackPanel>
        </Border>
    </DockPanel>
</Window>
4

4 回答 4

18

一个堆叠面板,无论你如何拉伸它,都会在孩子们周围塌陷。你不能让它增长得更多。基本上,“Height=700”对你没有帮助。

因此,要么将 StackPanel 上的 VerticalAlignment 设置为“center”,以便让 stackpanel 进入停靠面板的中心……或者完全移除 stackpanel 并在 TextBlock 上设置 VerticalAlignment="Center"。

于 2009-12-17T01:45:55.463 回答
11

似乎我在 10 个月前问过这个问题,我通过将StackPanel替换为DockPanel LastChildFill=True来实现上述场景,如下所示:

<DockPanel LastChildFill="True">
    <TextBlock
        DockPanel.Dock="Top"
        Text="Test"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        FontSize="200" x:Name="TheNumber"/>
</DockPanel>
于 2009-12-17T01:18:09.953 回答
5

我偶然发现了这个似乎完美的工作:

<Grid>
    <TextBlock Text="My Centered Text"
               TextAlignment="Center" 
               VerticalAlignment="Center"/>
</Grid>

Grid 确保其中的单个 TextBox 填充网格中的单独单元格,TextBlock 中的 VerticalAlignment 确保文本居中。

只需根据需要将文本水平定位/对齐(上面的代码片段也将其居中在该轴上,但更改它不会改变垂直居中)。

于 2014-08-27T06:47:07.593 回答
-3

在围绕 TextBlock 的 StackPanel 中,检查 VerticalContentAlignment。

于 2009-12-17T01:05:39.103 回答