2009-12-17 57 views
10

En el siguiente XAML, la palabra "test" centros horizontal pero no verticalmente.¿Cómo puedo alinear verticalmente un TextBox dentro de un StackPanel?

¿Cómo puedo conseguirlo para centrar verticalmente?

alt text http://www.deviantsart.com/upload/i4i5mt.png

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

Respuesta

16

StackPanel, no importa cómo se estira, se colapsará alrededor de los niños. no puedes hacer que crezca más que eso. Básicamente, esa "Altura = 700" no te está ayudando.

Por lo tanto, establezca VerticalAlignment en el StackPanel para "centrar" de modo que el panel de distribución entre en el centro del dockpanel ... o elimine completamente el stackpacknel y configure VerticalAlignment = "Center" en el TextBlock.

+5

1 para "un StackPanel, no importa cómo se estira, se colapsará en torno a sus hijos". –

-2

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

+4

Pero StackPanel no parecen tener VerticalContentAlignment como lo hace, por ejemplo, Botón: http://msdn.microsoft.com/en-us/library/system.windows.controls.control.verticalcontentalignment.aspx –

10

parece que asked this question 10 months ago, me dieron el escenario anterior a trabajar mediante la sustitución de la StackPanel con DockPanel LastChildFill = True así:

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

Esto es justo lo que necesitaba. Puse un StackPanel dentro del DockPanel, y luego establecí el VerticalAlignment de StackPanel en Center. El contenido de StackPanel se centró en el StackPanel, que se expandió para llenar el DockPanel. –

+0

No encontré DockPanel en mi caja de herramientas. pero se puede usar ContentControl funciona muy bien gracias .... –

+1

funciona .... – maamaa

4

me encontré con este que parece funcionar perfectamente:

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

La rejilla asegura que el único cuadro de texto dentro de ella se llena la celda de aislamiento en la red y la VerticalAlignment de TextBlock asegura que el texto se centra dentro que.

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

+0

que tienen el siguiente escenario: Sin embargo, sólo la primera Textblock está alineado verticalmente en el centro. El segundo bloque de texto sigue alineado por la parte superior. –

Cuestiones relacionadas