Como posso alinhar verticalmente uma caixa de texto dentro de um Stackpanel?
-
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>
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.