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 для стековой панели.

Другие вопросы по тегам