2010-05-28 31 views
25

Tôi luôn gặp sự cố với ListView bên trong điều khiển bố cục động như Stackpanel.Kéo dài WPF ListView trống để chiếm không gian còn lại

Hiện tại tôi có Cửa sổ với Stackpanel làm Kiểm soát gốc. Stackpanel streches hoàn hảo và có cửa sổ hoàn chỉnh. Bên trong StackPanel là một số điều khiển khác như hộp văn bản và nút tất cả liên kết tốt.

Đối tượng cuối cùng là một ListView. Tôi muốn ListView để lấy không gian còn lại từ StackPanel nhưng nó không. Ngay cả với VerticalAlignment = "Stretch" Tôi chỉ nhận được các tiêu đề cột. ListView chỉ phát triển khi các mục được thêm vào nó. Vì vậy, tôi phải đặt chiều cao ListView theo cách thủ công.

Làm cách nào để tôi có thể làm cho ListView lấp đầy khoảng trống còn lại trong StackPanel ngay cả khi nó trống?

+0

Bạn có thể đăng một số XAML không. – zendar

Trả lời

30

Điều này không liên quan gì đến ListView. Đó là "lỗi" của StackPanel. Trong một StackPanel các mục con luôn luôn chỉ tiêu thụ không gian mà chúng cần (theo hướng định hướng của StackPanel). Đó là cách StackPanel được thiết kế. Sử dụng DockPanel thay vào đó, ở đó bạn có thể làm cho mục cuối điền vào tất cả các không gian còn lại bằng cách sử dụng LastChildFill="true" (true là mặc định, vì vậy không cần phải xác định rõ nó).

<DockPanel Background="Green"> 
    <Button DockPanel.Dock="Top">Text</Button> 
    <ListView DockPanel.Dock="Top"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn/> 
      </GridView> 
     </ListView.View> 
    </ListView>  
</DockPanel> 
11

Cách sử dụng lưới? Lưới được tạo cho loại bố cục này. DockPanel cũng là một gợi ý hay.

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

    <TextBlock Grid.Row="0" Text="row1"/> 
    <Button Grid.Row="1" Content="row2"/> 
    <ListView Grid.Row="2"> 
    <ListViewItem Content="Text"/> 
    <ListViewItem Content="Text1"/> 
    <ListViewItem Content="Text2"/> 
    </ListView> 
    </Grid> 

Phần quan trọng là Height = "*", điều này cho phép hàng chiếm hết không gian có sẵn, bạn có thể bỏ qua nếu bạn muốn vì đó là hành vi mặc định.

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