2013-09-23 5 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

(레이아웃에 사용되는) 기본값은 0입니다. –

+0

캔버스가 필요합니까? 그리드로 대체 할 수 있습니까? – Tony

답변

4

당신이하지 않았기 때문이다 캔버스의 경우 너비와 높이를 설정하고 캔버스의 경우에는 레이아웃에 사용되는 ActualWidth 및 ActualHeight 속성의 기본값은 0입니다.

캔버스의 배경 설정 - 위의 이유로 배경색이 렌더링되지 않습니다. 이 다음 중 하나를 수행 주위

작동하려면

  1. 명시 적으로 캔버스에 폭과 ​​높이를 설정 그것의 아이들의 크기에 따라 적응하는있는 (예를 들어, 그리드) 다른 컨테이너를 선택하십시오.
1

캔버스 대신 그리드의 테두리로 테두리를 넣을 수 있습니다. (그리드 한 자녀 이상을 가질 수) 이 시도 :

캔버스의 ActualWidth과의 ActualHeight 속성의 경우에 당신은 당신의 캔버스에 폭과 ​​높이를 설정하지 않았기 때문에, 그리고에
<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> 
관련 문제