2010-05-28 3 views
25

Stackpanel과 같은 동적 레이아웃 컨트롤 내부의 ListView에는 항상 문제가 있습니다.빈 WPF를 늘이기 ListView 나머지 공간을 가져 가기

지금은 루트 제어판으로 Stackpanel이있는 창이 있습니다. Stackpanel은 완벽하게 뻗어 있으며 전체 창을 차지합니다. StackPanel 내부에는 텍스트 상자와 같은 다른 컨트롤과 잘 정렬 된 버튼이 있습니다.

마지막 개체는 ListView입니다. ListView에서 StackPanel의 나머지 공간을 가져오고 싶지만 그렇지 않습니다. 심지어 으로 VerticalAlignment = "Stretch" 난 단지 열 머리글을 얻을. ListView는 항목이 추가 될 때만 커집니다. 그래서 ListView 높이를 수동으로 설정해야합니다.

빈 상태에서도 ListPanel의 나머지 공간을 채우려면 어떻게해야합니까?

+0

일부 XAML을 게시 할 수 있습니까? – zendar

답변

30

이것은 ListView와는 아무런 관련이 없습니다. StackPanel의 "오류"입니다. StackPanel에서 하위 항목 은 항상으로 필요한 공간 (StackPanel 방향)을 소모합니다. StackPanel이 어떻게 설계 되었습니까. 대신 DockPanel을 사용하면 마지막 항목이 LastChildFill="true" (기본값 : true이므로 명시 적으로 지정할 필요가 없음)을 사용하여 남은 모든 공간을 채울 수 있습니다.

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

그리드 사용은 어떻습니까? 그리드는 이런 종류의 레이아웃을 위해 만들어졌습니다. DockPanel 역시 좋은 제안입니다.

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

중요한 부분은 높이 = "*"이 가능한 모든 공간을 차지하기 위해 행을 알려줍니다 당신이 기본 동작으로 사용할 경우, 당신은이를 남길 수 있습니다.

관련 문제