2012-11-29 44 views
14

Tôi có một Dockpanel với các mục bên trong Canvas. Dockpanel và bất kỳ mục nào khác (Lưới vv) mà tôi đặt bên trong Canvas, chỉ chiếm không gian tối thiểu cần thiết của chúng. Làm cách nào để kéo các mục này để lấp đầy toàn bộ Canvas?Các mục kéo dài để tô đầy vải

<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> 

Cảm ơn bạn!

Trả lời

31

Bảng điều khiển Canvas không thực sự hỗ trợ điều đó.

Nó rất cơ bản - nó chỉ cho phép bạn định vị trẻ em hoàn toàn bằng cách sử dụng trên cùng, dưới, trái và phải, và nó luôn mang lại cho họ chỉ là không gian mà họ cần.

Vì vậy, thông thường bạn sẽ sử dụng Grid chỉ với 1 cột và 1 hàng thay thế. Tuy nhiên, bạn có thể liên kết chiều rộng và chiều cao của DockPanel với chiều rộng và chiều cao của Canvas. Bằng cách đó, DockPanel sẽ luôn điền vào số 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

Cảm ơn bạn! Tôi cần nó để vẫn là một Canvas cho hoạt ảnh của tôi: D – JosephGarrone

+0

Làm việc một sự quyến rũ cho một vấn đề tôi đã có quá:) –

+0

+ 1..thanks nó làm việc tuyệt vời – ygoku

2

Những gì bạn có thể làm là:

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

By gói cả tấm trong một mạng lưới như thế này bạn có thể đặt yếu tố mà bạn không thể đến vị trí tương đối sang trái, vv hàng đầu trong canvas. Cả canvas và dockpanel sẽ lấp đầy không gian có sẵn. Lưu ý rằng các phần tử trong dockpanel sẽ được hiển thị phía trên các phần tử trong canvas khi dockpanel được định nghĩa sau trong xaml.

Tôi giả sử mã bạn đăng là mã giả, nếu không bạn chỉ cần xóa canvas.

Các vấn đề liên quan