wpf DockPanel проблема
У меня есть 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 перекрывает нижнюю StackPanel. Зачем?
3 ответа
Я считаю, что проблема ваша LastChildFill
на DockPanel
iteself. Как поясняется в MSDN, LastChildFill делает так, чтобы ваша StackPanel занимала оставшееся пространство в DockPanel, даже если вы установили его в док-станцию внизу. Попробуйте удалить атрибут и посмотреть, поможет ли это.
Редактировать: удаление атрибута само по себе не делает этого. Я получил ожидаемое поведение, поменяв местами ListView и StackPanel, но это меняет порядок вкладок (хотя здесь это только между двумя элементами, поэтому установка фокуса на ListView заставляет его выглядеть правильно).
В качестве альтернативы, вы можете использовать сетку с двумя строками - ListView в первом ряду с высотой "*" и StackPanel во втором с высотой "Авто"? Или это упрощение более сложной компоновки, где это не сработает?
Если вы не хотите использовать Grid, вы можете решить эту проблему, добавив сначала StackPanel, а затем ListView, используя LastChildFill="True"
,
Как сказал @DocMax, последняя дочерняя заливка будет работать ТОЛЬКО в том случае, если в док-панели будет свободное место после того, как все предыдущие дочерние элементы заняты. За ListView
Имея большое количество строк, пространство уже занято им, поэтому стекпанель остается без места для заполнения.
Я полагаю, что вы поставили MinHeight для стековой панели.