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

StackOverflow https://stackoverflow.com/questions/1918847

  •  20-09-2019
  •  | 
  •  

Вопрос

В следующем 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>
Это было полезно?

Решение

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

Так что либо установите VerticalAlignment на StackPanel в "center", чтобы stackpanel находилась в центре dockpanel ..., либо вообще удалите stackpanel и установите VerticalAlignment="Center" в текстовом блоке.

Другие советы

Кажется, я задал этот вопрос 10 месяцев назад, Я заставил приведенный выше сценарий сработать, заменив Панель стекирования с DockPanel LastChildFill=Истина вот так:

<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>

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

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

Внутри StackPanel, которая окружает текстовый блок, проверьте VerticalContentAlignment .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top