#wpf #listview #dockpanel
#wpf #listview #панель управления
Вопрос:
У меня есть DockPanel с ListView и StackPanel:
<DockPanel Margin="5" LastChildFill="True">
<ListView Margin="5" ItemsSource="{Binding Source={StaticResource taxGroupSource}}" DockPanel.Dock="Top" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" VerticalAlignment="Stretch">
<ListView.View>
<GridView>
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding SerialNumber}" />
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Name}" />
</GridView>
</ListView.View>
</ListView>
<StackPanel DockPanel.Dock="Bottom" Style="{StaticResource buttonPanel}">
<Button Content="Close" Click="CloseClick"/>
</StackPanel>
</DockPanel>
Когда в GridView большое количество строк, ListView перекрывает нижнюю панель стека. Почему?
Ответ №1:
Я считаю, что проблема LastChildFill
в DockPanel
вас самих. Как объясняется MSDN, LastChildFill делает так, чтобы ваша StackPanel занимала оставшееся место в DockPanel, даже если вы установили его для закрепления внизу. Попробуйте удалить атрибут и посмотреть, поможет ли это.
Редактировать: удаление одного атрибута этого не делает. Я получил ожидаемое поведение, поменяв местами ListView и StackPanel, но это меняет порядок табуляции (хотя здесь он находится только между двумя элементами, поэтому установка фокуса на ListView делает его правильным).
В качестве альтернативы, можете ли вы использовать сетку с двумя строками — ListView в первой строке с высотой «*» и StackPanel во второй с высотой «Auto»? Или это упрощение более сложного макета, где это не сработает?
Комментарии:
1. Возможно, я попробую решение с помощью grid.
Ответ №2:
Как сказал @DocMax, последнее дочернее заполнение будет работать, ТОЛЬКО если в dockpanel останется свободное место после того, как все предыдущие дочерние элементы будут заняты. При ListView
наличии большого количества строк пространство уже занято им, поэтому в stackpanel не остается свободного места.
Я предлагаю вам указать некоторую минимальную высоту для stackpanel.
Ответ №3:
Если вы не хотите использовать Grid, вы можете решить ее, добавив сначала StackPanel, а затем ListView с помощью using LastChildFill="True"
.