2009-12-17 22 views
10

W poniższym XAML słowo "Test" centra poziomo, ale nie pionowo.Jak mogę wyrównać w pionie TextBox wewnątrz StackPanel?

Jak mogę ustawić go pionowo na środku?

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> 

Odpowiedz

16

StackPanel, bez względu na to, w jaki sposób go rozciągnąć, załamie wokół dzieci. nie możesz sprawić, żeby rosło więcej. Zasadniczo, że "Wysokość = 700" nie pomaga.

Tak więc albo ustaw VerticalAlignment na StackPanel na "center" tak, aby panel Stackpanel znalazł się na środku panelu ... lub całkowicie usuń panel Stackpanel i ustaw VerticalAlignment = "Center" na TextBlock.

+5

+1 dla "stackpanela, nie ważne jak go rozciągniesz, zawali się wokół swoich dzieci". –

-2

Wewnątrz StackPanel, który otacza TextBlock, sprawdź VerticalContentAlignment.

+4

Ale StackPanel nie ma pozycji VerticalContentAlignment, jak np. Przycisk: http://msdn.microsoft.com/en-us/library/system.windows.controls.control.verticalcontentalignment.aspx –

10

Wydaje I asked this question 10 months ago, mam powyższy scenariusz do pracy, zastępując StackPanel z DockPanel LastChildFill = True tak:

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

Tego właśnie potrzebowałem. Umieściłem StackPanel wewnątrz DockPanel, a następnie ustawiłem VerticalAlignment StackPanel na Center. Zawartość StackPanel została następnie wyśrodkowana w StackPanel, który został rozszerzony, aby wypełnić DockPanel. –

+0

Nie znalazłem DockPanel w moim przyborniku. ale możesz użyć ContentControl, który działa dobrze –

+1

dzięki .... działa .... – maamaa

4

natknąłem się ten, który wydaje się doskonale działa:

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

Siatka zapewnia, że ​​pojedynczy TextBox w nim wypełnia samotnej celi w siatce i VerticalAlignment w TextBlock zapewnia, że ​​tekst jest wyśrodkowany wewnątrz niż.

Po prostu umieść/wyrównaj tekst w poziomie, jakkolwiek tego potrzebujesz (powyższy fragment również centruje go w tej osi, ale zmiana nie zmienia pionowego centrowania).

+0

Mam następujący scenariusz: jednak tylko pierwszy Blok tekstu jest wyrównany pionowo w środku, a drugi blok tekstu jest wyrównany do góry. –

Powiązane problemy