wpf DockPanel проблема - PullRequest
       17

wpf DockPanel проблема

0 голосов
/ 04 ноября 2011

У меня есть 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 ]

3 голосов
/ 04 ноября 2011

Я считаю, что проблема в том, что вы LastChildFill на DockPanel себе. Как объясняется в MSDN , LastChildFill делает так, чтобы ваша StackPanel занимала оставшееся пространство в DockPanel, даже если вы установили его в док-станцию ​​внизу. Попробуйте удалить атрибут и посмотреть, поможет ли это.

Редактировать: Удаление одного атрибута не делает этого. Я получил ожидаемое поведение, поменяв местами ListView и StackPanel, но это меняет порядок вкладок (хотя здесь это только между двумя элементами, поэтому установка фокуса на ListView заставляет его выглядеть правильно).

В качестве альтернативы, вы можете использовать сетку из двух строк - ListView в первом ряду с высотой "*" и StackPanel во втором с высотой "Авто"? Или это упрощение более сложной компоновки, где это не сработает?

0 голосов
/ 01 июня 2012

Если вы не хотите использовать Grid, вы можете решить эту проблему, добавив сначала StackPanel, а затем ListView, используя LastChildFill="True".

0 голосов
/ 04 ноября 2011

Как @DocMax сказал, что последняя дочерняя заливка будет работать ТОЛЬКО, если в панели док-станции есть свободное место после того, как все предыдущие дочерние элементы заняты. Для ListView, имеющего большое количество строк, пространство уже занято им, поэтому стекпанель остается без места.

Полагаю, вы предоставили MinHeight для панели стека.

...