Протяните пустой WPF ListView, чтобы занять оставшееся пространство - PullRequest
30 голосов
/ 28 мая 2010

У меня всегда возникают проблемы с ListView внутри элемента управления динамической разметкой, например, с Stackpanel.

Сейчас у меня есть окно со стековой панелью в качестве Root-Control. Stackpanel отлично растягивается и занимает все окно. Внутри StackPanel находятся некоторые другие элементы управления, такие как текстовые поля и кнопки, все выровнены в порядке.

Последний объект - это ListView. Я хочу, чтобы ListView занял оставшееся пространство из StackPanel, но это не так. Даже с VerticalAlignment = "Stretch" Я получаю только заголовки столбцов. ListView растет только при добавлении к нему элементов. Поэтому я должен установить высоту ListView вручную.

Как заставить ListView заполнить оставшееся пространство в StackPanel, даже если оно пустое?

Ответы [ 2 ]

36 голосов
/ 28 мая 2010

Это не имеет ничего общего с 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>
17 голосов
/ 28 мая 2010

Как насчет использования сетки? Сетки сделаны для этого типа макета. 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>

Важной частью является высота = "*", это говорит о том, что строка занимает все доступное пространство, вы можете оставить это, если хотите, так как это поведение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...