2012-11-29 3 views
14

캔버스 안에 아이템이있는 Dockpanel이 있습니다. Dockpanel과 Canvas 안에있는 다른 항목 (그리드 등)은 최소한의 공간 만 차지합니다. 이 항목들을 전체 캔버스를 채우기 위해 어떻게 늘립니까?캔버스를 채우는 스트레치 아이템

<Canvas x:Name="InfoCanvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="72,53,0,0"> 
     <DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="ReferenceInfo" Canvas.Left="0" Canvas.Top="0"> 
      <TextBox x:Name="ReferenceAuthor" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Author" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/> 
      <TextBox x:Name="ReferenceTitle" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Title" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/> 
      <TextBox x:Name="ReferenceDate" GotFocus="FieldEnter" LostFocus="FieldLeave" FontSize="16" FontFamily="Segoe UI Light" Text="Date" Foreground="Gray" Background="Transparent" DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="0" Margin="0,2,0,2"/> 
     </DockPanel> 
    </Canvas> 

고마워요!

답변

31

Canvas 패널은 실제로이를 지원하지 않습니다.

아주 기본적인 것입니다. 위쪽, 아래쪽, 왼쪽 및 오른쪽을 사용하여 절대적으로 어린이를 배치 할 수 있으며, 필요한 공간 만 제공합니다.

보통 1 열 1 행을 사용하는 Grid을 사용합니다.

DockPanel의 너비와 높이를 Canvas의 너비와 높이로 바인딩 할 수 있습니다. 그러면 DockPanel은 항상 Canvas을 채울 것입니다.

<DockPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" 
      Margin="0,0,0,0" x:Name="ReferenceInfo" Canvas.Left="0" Canvas.Top="0" 
      Width="{Binding ActualWidth, ElementName=InfoCanvas}" 
      Height="{Binding ActualHeight, ElementName=InfoCanvas}"> 
+0

감사합니다. 나는 여전히 내 애니메이션을위한 캔버스가 필요했다. D – JosephGarrone

+0

내가 가지고 있었던 문제에 대한 매력을 다뤘다.) –

+0

+ 1. 좋은 덕택이다. – ygoku

2

당신이 할 수있는 것은 :

<Grid> 
    <Canvas x:Name="InfoCanvas"> 
     <!--Elements with canvas layout here--> 
    </Canvas> 
    <DockPanel x:Name="ReferenceInfo"> 
     <!--Elements with dockpanel layout here--> 
    </DockPanel> 
</Grid> 

당신이 캔버스의 왼쪽 상단 등을 기준으로 위치를 캔트 요소를 배치 할 수 있습니다 이와 같은 그리드에 모두 패널을 포장하여. 캔버스와 dockpanel 모두 사용 가능한 공간을 채 웁니다. xbox에서 dockpanel을 정의하면 dockpanel의 요소가 캔바스의 요소 위에 렌더링됩니다.

내가 게시 한 코드가 의사 코드라고 가정합니다. 그렇지 않으면 캔버스를 제거해야합니다.