2009-12-17 3 views
10

В следующем XAML слово «Test» центров горизонтально, но не по вертикали.Как можно вертикально выровнять TextBox внутри StackPanel?

Как я могу получить его в центре по вертикали?

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> 

ответ

16

StackPanel, независимо от того, как вы протягиваете его, не развалится вокруг детей. вы не можете заставить его расти больше, чем это. В принципе, что «Height = 700» вам не помогает.

Таким образом, либо установите VerticalAlignment на StackPanel на «центр», чтобы стековая панель попала в центр док-панели ... или полностью удалила стекную панель и установила VerticalAlignment = «Center» на TextBlock.

+5

+1 для «стекольной панели, как бы вы ее не растянули, рухнет вокруг своих детей». –

-2

Внутри StackPanel, который окружает TextBlock, проверить VerticalContentAlignment.

+4

Но у StackPanel, похоже, нет VerticalContentAlignment, как например. Кнопка: http://msdn.microsoft.com/en-us/library/system.windows.controls.control.verticalcontentalignment.aspx –

10

Кажется, я asked this question 10 months ago, я получил вышеупомянутый сценарий для работы по замене StackPanel с DockPanel LastChildFill = True так:

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

Это именно то, что мне нужно. Я положил StackPanel внутри DockPanel, а затем установил VerticalAlignment StackPanel в Center. Затем содержимое StackPanel было сосредоточено в StackPanel, которое было расширено для заполнения DockPanel. –

+0

Я не нашел DockPanel в своем наборе инструментов. но вы можете использовать ContentControl, он работает просто отлично –

+1

спасибо .... он работает .... – maamaa

4

я наткнулся на это, которое, кажется, работает отлично:

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

Сетка гарантирует, что единственный TextBox в ней заполняет одиночную камеру в сетке и VerticalAlignment в TextBlock гарантирует, что текст по центру внутри чем.

Просто поместите/выровняйте текст по горизонтали, как вам нужно (вышеупомянутый фрагмент также центрирует его по этой оси, но изменение этого не влияет на вертикальное центрирование).

+0

У меня есть следующий сценарий: Однако, только первый Textblock выравнивается по вертикали в центре. Второй Textblock по-прежнему выровнен по центру. –

Смежные вопросы