2009-06-11 25 views
11

Tôi có một số StackPanel có chứa StackPanel và một số mặt hàng khác. StackPanel đầu tiên có hướng thẳng đứng, hướng bên trong có hướng nằm ngang. Bên trong có một số TreeViewListView, tôi muốn chúng mở rộng và vừa với chiều rộng của cửa sổ mà tôi đặt ở cửa sổ và cho phép người dùng thay đổi. Tôi cũng muốn bên ngoài StackPanel để vừa với chiều cao của cửa sổ. Làm thế nào để tôi làm điều này?Cách tạo các mục trong DockPanel mở rộng để phù hợp với tất cả không gian có sẵn trong WPF?

Edit: tôi đã chuyển đổi sang sử dụng một DockPanel, và tôi đã thiết lập các thuộc tính DockPanel.Dock một cách chính xác trong mỗi yếu tố, và đã vô hiệu hóa LastChildFill trong cả hai dockpanels, cách bố trí vẫn không căng.

Bộ luật:

<Window x:Class="Clippy.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> 
    <DockPanel Name="wrapperDockPanel" LastChildFill="False"> 
     <Menu Height="22" Name="mainMenu" Width="Auto" DockPanel.Dock="Top" /> 
     <ToolBar Height="26" Name="mainToolBar" Width="Auto" DockPanel.Dock="Top" /> 
     <DockPanel Height="Auto" Name="contentDockPanel" DockPanel.Dock="Top" LastChildFill="False"> 
      <TreeView Name="categoryTreeView" /> 
      <ListView Name="clipListView" /> 
     </DockPanel> 
     <StatusBar Height="23" Name="mainStatusBar" DockPanel.Dock="Top" /> 
    </DockPanel> 
</Window> 
+0

Chúng tôi có thể xem mã không? – Brad

+1

Tại sao bạn đặt LastChildFill = "False"? Giá trị mặc định của True sẽ làm cho ListView lấp đầy không gian. –

+0

Đồng ý với Henk quá ... –

Trả lời

7

Điều này nên làm điều đó - tôi thiết lập nó để TreeView và ListView chia sẻ giao diện chính 50/50; nếu bạn không muốn điều đó, hãy đặt nó thành 'Tự động' và '*' hoặc một cái gì đó. Sử dụng "LastChildFill" để lợi thế của bạn!

<Window x:Class="Clippy.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="400" Width="600" MinHeight="400" MinWidth="600" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged"> 

    <DockPanel LastChildFill="True"> 
     <Menu Width="Auto" DockPanel.Dock="Top" /> 
     <ToolBar Width="Auto" DockPanel.Dock="Top" /> 
     <StatusBar DockPanel.Dock="Bottom" /> 

     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="0.5*" /> 
       <RowDefinition Height="0.5*" /> 
      </Grid.RowDefinitions> 

      <TreeView Name="categoryTreeView" Grid.Row="0" /> 
      <ListView Name="clipListView" Grid.Row="1" /> 
     </Grid> 
    </DockPanel> 

</Window> 
0

Set chiều rộng và chiều cao tính đến "tự động"

11

Sử dụng một DockPanel để thay thế. StackPanel rõ ràng không quan tâm đến không gian hiển thị, trong khi DockPanel thực hiện tất cả tính toán kích thước của nó dựa trên không gian có sẵn.

Cập nhật:

Bên cạnh đó, kinh nghiệm của tôi, đưa cơ thể của cửa sổ vào một View, và chỉ có các Xem trong cửa sổ làm cho một kinh nghiệm tự động Kích thước tốt hơn.

Vì một số lý do khiến tất cả trẻ em trực tiếp vào Cửa sổ dường như không tự động định kích thước rất tốt.

Cập nhật 2:

tôi sẽ loại bỏ các thuộc tính DockPanel.Dock rõ ràng từ các yếu tố mà bạn muốn kéo dài (điền) không gian không sử dụng.

+0

Đúng, DockPanel hoạt động độc đáo. Cũng hoạt động trong Silverlight. –

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