Как я могу выровнять TextBox по вертикали внутри StackPanel?

В следующем XAML слово "Тест" центрируется горизонтально, но не вертикально.

Как я могу получить его по центру по вертикали?

<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 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам