Como posso alinhar verticalmente uma caixa de texto dentro de um Stackpanel?

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

  •  20-09-2019
  •  | 
  •  

Pergunta

No XAML seguinte, a palavra "teste" centros horizontalmente mas não verticalmente.

Como posso colocá -lo 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>
Foi útil?

Solução

Um Stackpanel, não importa como você o estique, entrará em colapso nas crianças. Você não pode fazer crescer mais do que isso. Basicamente, essa "altura = 700" não está ajudando você.

Portanto, defina o VerticalAnigment no Stackpanel como "centro" para que o Stackpanel entre no centro do dockpanel ... ou remova completamente o Stackpanel e defina verticalalignment = "Center" no bloco de texto.

Outras dicas

Parece que eu perguntou esta pergunta há 10 meses, Eu tenho o cenário acima para trabalhar substituindo o Stackpanel com Dockpanel lastchildfill = true assim:

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

Eu tropecei nisso, o que parece funcionar perfeitamente:

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

A grade garante que a caixa de texto única dentro dela preencha a célula solitária na grade e o alinhamento vertical no bloco de texto garante que o texto seja centrado dentro do que.

Basta posicionar/alinhar seu texto horizontalmente, mas você precisar (o snippet acima também o centra neste eixo, mas alterar isso não altera a centralização vertical).

Dentro do Stackpanel que circunda o bloco de texto, confira o verticalContentalignment.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top