2011-01-12 29 views
10

Điều này có vẻ như một câu hỏi đơn giản như vậy, nhưng tôi đã cố gắng một giờ và dường như không thể tìm ra.Docking/Filling in WPF

Tất cả những gì tôi muốn làm là điền vào MainWindow bằng Canvas. Tôi không thể tìm thấy bất kỳ tài sản để cho phép điều này, và cách duy nhất tôi có thể nghĩ đến để làm điều đó là để thiết lập Canvas.Width/Height = MainWindow.Width/Height, nhưng tôi sẽ phải làm điều đó mỗi khi cửa sổ được thay đổi kích cỡ.

Trong WinForms, việc lắp ghép phần tử trong vùng chứa chính dễ dàng.

Trả lời

20

Chỉ cần đặt Canvas. HorizontalAlignmentVerticalAlignment để "Kéo dài". Điều này sẽ làm cho Canvas lấp đầy khoảng trống có sẵn từ không gian chứa phần tử giao diện người dùng. Chỉ cần đảm bảo KHÔNG chỉ định Chiều rộng/Chiều cao một cách rõ ràng.

Trong XAML, điều này chỉ là:

<Window ...Other window props... > 
    <Canvas HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <!-- Canvas items here... --> 
    </Canvas> 
</Window> 
+3

Và chỉ cần đảm bảo bạn chưa đặt Chiều rộng/Chiều cao các thuộc tính một cách rõ ràng trên canvas của bạn. – RQDQ

+0

Tính năng này hoạt động. Tôi biết tôi đã thử nó trước đó và nó không hoạt động, nhưng ai biết được. Cảm ơn. - Chỉnh sửa: Tôi có thể đặt Chiều rộng/Chiều cao. – Eric

+0

Tốt nhất. Không phụ thuộc vào bất cứ điều gì khác. –

2

đặt này cho chiều rộng vải của bạn và chiều cao trong XAML.

Width="{Binding Path=ActualWidth, ElementName=Window1}" 
Height="{Binding Path=ActualHeight, ElementName=Window1}" 

nó nên thay đổi cho phù hợp khi bạn thay đổi kích thước cửa sổ

+2

Làm cách nào tốt hơn? Tôi nghĩ câu trả lời của Eric đơn giản hơn/mạnh mẽ hơn là thực hiện loại ràng buộc này. – RQDQ

0

Nevermind, có vẻ như bạn cần phải thêm một DockPanel:

<DockPanel Name="dockPanel1"> 
    <Canvas Name="canvas1" Background="White"></Canvas> 
</DockPanel> 
+0

Có nhiều cách để thực hiện việc này. Điều này là một chút overkill, nhưng sẽ làm việc tốt. – RQDQ

+2

Mẹo: không để các tên được tạo tự động đó trên các điều khiển của bạn. Cung cấp cho họ những cái tên có ý nghĩa. Bạn sẽ hạnh phúc hơn khi bạn không phải kiểm tra nếu số tấm giấy phép là trong textBox23 hoặc textBox17. Tốt hơn, đừng đặt tên cho họ nếu bạn không cần tham khảo chúng: trong các tên WPF là tùy chọn. –

+0

@Martinho, tôi không biết tên là tùy chọn. Đó là thuận tiện. Cảm ơn. – Eric

3

Trong WPF bạn có thể làm docking bằng cách đặt các mục của bạn bên trong một DockPanel và sử dụng thuộc tính được thừa kế của Dock. Tuy nhiên, nếu bạn muốn toàn bộ Cửa sổ trở thành Canvas, chỉ cần làm cho nội dung của Window là canvas và không phải loại bảng điều khiển khác:

<Window ...> 
    <Canvas> 
     <!-- blah blah --> 
    </Canvas> 
</Window>