2013-09-23 6 views
1

У меня есть диалоговое окно с полным экраном и вы хотите центрировать холст. Он хорошо работает с сеткой с вертикальной/HorizontalAlignment для ярлыка, например, но когда я пытаюсь это верхний левый угол получает по центру вместо середины холста:Как правильно центрировать холст WPF?

<Window 
    Title="" 
    Topmost="True" WindowStyle="None" WindowState="Maximized" 
    > 
<Grid> 
    <Grid VerticalAlignment="Center" HorizontalAlignment="Center"> 
     <Canvas> 
      <Border Margin="20" 
       Background="White" 
       BorderBrush="Black" 
       BorderThickness="2" 
       Padding="20" > 
       <DockPanel Margin="10"> 
        <StackPanel DockPanel.Dock="Top" Margin="0 0 0 50" 
           Orientation="Vertical"> 
         <Label FontSize="32" Content="Hello"></Label> 
        </StackPanel> 
        <StackPanel HorizontalAlignment="Right" 
           DockPanel.Dock="Bottom" 
           Orientation="Horizontal"> 
          <Label FontSize="32" Content="Hello"></Label> 
        </StackPanel> 
       </DockPanel> 
      </Border> 
     </Canvas> 
    </Grid> 
+1

Это потому, что вы не установили ширину и высоту на холсте, и в случае холста, свойства ActualWidth и ActualHeight (которые используются для макета) по умолчанию 0. –

+0

Вам нужен холст, можно ли его заменить сеткой? – Tony

ответ

4

Это потому, что вы не имеете установите ширину и высоту на холсте, а в случае с холстом, свойства ActualWidth и ActualHeight (которые используются для макета) по умолчанию равны 0.

Вы можете проверить это, установив фон на холсте - в вашем случае цвет фона не будет отображаться из-за вышеупомянутой причины.

Чтобы обойти эту проблему выполните одно из следующих действий:

  1. выбрать другой контейнер (Grid, например), который адаптирует основанный на это детских размерах
  2. установить ширину и высоту на холсте явно.
1

Вы можете поместить границу как дочерний элемент сетки вместо холста. (Сетка может иметь более одного ребенка) Попробуйте это:

<Window    
    Title="" 
    Topmost="True" WindowStyle="None" WindowState="Maximized" 
    > 
    <Grid> 
     <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
      <Rectangle Canvas.Left="40" Canvas.Top="31" Width="630" Height="41" Fill="Blue" /> 
      <Ellipse Canvas.Left="130" Canvas.Top="79" Width="580" Height="580" Fill="Blue" /> 
      <Path Canvas.Left="61" Canvas.Top="28" Width="133" Height="98" Fill="Blue" Stretch="Fill" Data="M61,325 L293,28" /> 
     </Canvas> 
     <Border Margin="20" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       Background="WhiteSmoke" 
       BorderBrush="Black" 
       BorderThickness="2" 
       Padding="20"> 
      <DockPanel Margin="10"> 
       <StackPanel DockPanel.Dock="Top" Margin="0 0 0 50" Orientation="Vertical"> 
        <Label FontSize="32" Content="Hello" /> 
       </StackPanel> 
       <StackPanel HorizontalAlignment="Right" 
           DockPanel.Dock="Bottom" 
           Orientation="Horizontal"> 
        <Label FontSize="32" Content="Hello" /> 
       </StackPanel> 
      </DockPanel> 
     </Border> 

    </Grid> 
</Window> 
Смежные вопросы