如何在StackPanel中垂直对齐TextBox?

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个回答

18
无论您如何拉伸StackPanel,它都会围绕子元素折叠。您无法使其增长超过此范围。基本上,“Height=700”对您没有帮助。
因此,要么在StackPanel上设置VerticalAlignment为“center”,使StackPanel进入DockPanel的中心位置...或者完全删除StackPanel,并在TextBlock上设置VerticalAlignment =“Center”。

5
+1 表示“无论如何拉伸 StackPanel,它都会围绕其子元素折叠”。 - Edward Tanguay

12

似乎我10个月前问过这个问题,我通过将StackPanel替换为DockPanel LastChildFill=True使上述场景正常工作,代码如下:

<DockPanel LastChildFill="True">
    <TextBlock
        DockPanel.Dock="Top"
        Text="Test"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        FontSize="200" x:Name="TheNumber"/>
</DockPanel>

这正是我所需要的。我在 DockPanel 中放置了一个 StackPanel,然后将 StackPanel 的 VerticalAlignment 设置为 Center。然后 StackPanel 的内容就居中显示在 StackPanel 中,并且 StackPanel 会扩展以填充 DockPanel。 - Adam Prescott
我在工具箱中没有找到DockPanel,但你可以使用ContentControl,它完全可以胜任。 - NadaNK

6
我偶然发现了这个方法,它似乎完美地解决了问题:
<Grid>
    <TextBlock Text="My Centered Text"
               TextAlignment="Center" 
               VerticalAlignment="Center"/>
</Grid>

网格(Grid)确保其中的单个文本框填充网格中的孤立单元格,而TextBlock中的VerticalAlignment确保文本在其中居中对齐。
只需按照您所需的方式水平定位/对齐文本(上面的片段也将其居中对齐,但更改此内容不会更改垂直居中对齐)。

我有以下情景: <StackPanel Orientation="Horizontal"> <TextBlock ... VerticalAlignment="Center" /> <TextBlock ... VerticalAlignment="Center" /> </Stackpanel>但是,只有第一个Textblock垂直居中对齐。第二个Textblock仍然是顶部对齐的。 - Daniel Retief Fourie

-3
在封装 TextBlock 的 StackPanel 内部,查看 VerticalContentAlignment。

4
但是 StackPanel 似乎没有像 Button 一样的 VerticalContentAlignment 属性:http://msdn.microsoft.com/en-us/library/system.windows.controls.control.verticalcontentalignment.aspx - Edward Tanguay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接