Как я могу выровнять TextBox по вертикали внутри StackPanel? - PullRequest
12 голосов
/ 17 декабря 2009

В следующем 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 ]

17 голосов
/ 17 декабря 2009

Панель стека, независимо от того, как вы ее растягиваете, развалится вокруг детей. Вы не можете заставить это расти больше чем это. По сути, «Высота = 700» вам не помогает.

Так что либо установите VerticalAlignment на StackPanel в «центр», чтобы панель стека входила в центр панели док-станции ..., либо полностью удалите панель стека и установите VerticalAlignment = "Center" в TextBlock.

10 голосов
/ 17 декабря 2009

Кажется, я задал этот вопрос 10 месяцев назад . Я получил приведенный выше сценарий для работы, заменив StackPanel на DockPanel LastChildFill = True следующим образом:

<DockPanel LastChildFill="True">
    <TextBlock
        DockPanel.Dock="Top"
        Text="Test"
        HorizontalAlignment="Center"
        VerticalAlignment="Center"
        FontSize="200" x:Name="TheNumber"/>
</DockPanel>
5 голосов
/ 27 августа 2014

Я наткнулся на это, которое, кажется, прекрасно работает:

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

Сетка гарантирует, что отдельный TextBox внутри нее заполняет отдельную ячейку в сетке, а VerticalAlignment в TextBlock обеспечивает центрирование текста в пределах чем.

Просто расположите / выровняйте текст по горизонтали, как вам нужно (приведенный выше фрагмент также центрирует его по этой оси, но изменение этого значения не приводит к изменению вертикального центрирования).

0 голосов
/ 17 декабря 2009

Внутри StackPanel, которая окружает TextBlock, проверьте VerticalContentAlignment.

...