¿Cómo puedo alinear verticalmente un cuadro de texto dentro de un StackPanel?

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

  •  20-09-2019
  •  | 
  •  

Pregunta

En el siguiente XAML, la palabra "test" centros horizontalmente pero no verticalmente.

¿Cómo puedo conseguirlo para centrar verticalmente?

<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>
¿Fue útil?

Solución

A StackPanel, no importa cómo se estira, se colapsará en torno a los niños. usted no puede hacerlo crecer más que eso. Básicamente, que "Altura = 700" no le está ayudando.

Así que, o establecer VerticalAlignment en el StackPanel a "centro" para que el StackPanel entra en el centro de la DockPanel ... o eliminar por completo el StackPanel y establecer VerticalAlignment = "centro" en el TextBlock.

Otros consejos

hecho esta pregunta hace 10 meses , me dieron el escenario anterior a trabajar mediante la sustitución de la StackPanel DockPanel LastChildFill = true como esto:

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

Me encontré con este que parece funcionar a la perfección:

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

La rejilla asegura que el único cuadro de texto dentro de ella llena la celda de aislamiento en la rejilla y el VerticalAlignment en el TextBlock asegura que el texto está centrado dentro de.

Simplemente posición / alinear el texto horizontalmente sin embargo que necesite (centra el fragmento anterior en este eje también, pero cambiando esto no altera el centrado vertical).

Dentro de la StackPanel que rodea el TextBlock, echa un vistazo a VerticalContentAlignment.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top