2009-12-17 6 views
10

Dans le code XAML suivant, le mot "Test" centre horizontalement mais pas verticalement.Comment aligner verticalement un TextBox dans un StackPanel?

Comment puis-je le centrer verticalement?

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> 

Répondre

16

A StackPanel, peu importe comment vous étirer, s'effondrer autour des enfants. vous ne pouvez pas le faire pousser plus que ça. Fondamentalement, cette "hauteur = 700" ne vous aide pas. Définissez donc VerticalAlignment sur le StackPanel pour qu'il soit centré de sorte que le panneau de la pile se place au centre du panneau d'ancrage ... ou supprimez complètement le panneau de la pile et définissez VerticalAlignment = "Center" sur le TextBlock.

+5

+1 pour "un panneau de pile, peu importe comment vous l'étirez, va s'effondrer autour de ses enfants". –

-2

A l'intérieur du StackPanel qui entoure le TextBlock, consultez VerticalContentAlignment.

+4

Mais StackPanel ne semble pas avoir VerticalContentAlignment comme le fait par exemple. Button: http://msdn.microsoft.com/en-us/library/system.windows.controls.control.verticalcontentalignment.aspx –

10

Semble Je asked this question 10 months ago, je suis arrivé le scénario ci-dessus pour travailler en remplaçant le StackPanel avec DockPanel LastChildFill = True comme ceci:

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

C'est exactement ce dont j'avais besoin. J'ai mis un StackPanel à l'intérieur du DockPanel, puis j'ai placé VerticalAlignment de StackPanel au centre. Le contenu StackPanel a ensuite été centré dans le StackPanel, qui a été développé pour remplir le DockPanel. –

+0

Je n'ai pas trouvé DockPanel dans ma boîte à outils. mais vous pouvez utiliser ContentControl cela fonctionne très bien –

+1

merci .... cela fonctionne .... – maamaa

4

je suis tombé sur ce qui semble fonctionner parfaitement:

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

La grille assure que la zone de texte unique en son sein remplit la cellule d'isolement dans la grille et la VerticalAlignment du TextBlock veille à ce que le texte soit centrée que. Il suffit de positionner/aligner votre texte horizontalement comme vous le souhaitez (l'extrait ci-dessus le centre également sur cet axe, mais cela ne modifie pas le centrage vertical).

+0

J'ai le scénario suivant: Cependant, seule la première Textblock est aligné verticalement au centre, le second Textblock est toujours aligné au sommet. –

Questions connexes