首页 > 解决方案 > ListBox 项需要占据 Grid 行的整个高度

问题描述

在我的 WPF 应用程序中,我ListBox放置了Grid一行。我希望列表项占据行的高度,而不管列表中有多少项。因此,当列表中只有一项时,它应该是该行的高度。如果列表中有两个项目,它们应该一起占据行的总高度。当前,当列表中有一项时,其高度变得小于行高。

我的 XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <!-- there are other controls in grid row 0, 1 and 2 -->

    <ListBox x:Name="CustomerListBox" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3"
                     ItemsSource="{Binding CustomersCollection}"
                     HorizontalContentAlignment="Stretch"  
                     SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
                     VerticalContentAlignment="Stretch" SelectionMode="Single">
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="DockPanel.Dock" Value="Top" />
            </Style>
        </ListBox.ItemContainerStyle>

        <!--<ListBox.ItemsPanel>
                <ItemsPanelTemplate >
                    <UniformGrid Columns="1" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>-->

        <ListBox.ItemTemplate>
            <DataTemplate >
                <uiView:CustomerUserControl Margin="0.5,0,0,-10"/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

当我取消注释该ItemsPanelTemplate部分时,由于 UniformGrid 放置在项目面板中,它按预期工作,但由于其他一些原因,我不想为此 ListBox 使用 ItemsPanelTemplate。有什么方法可以让项目占据网格行的整个高度而不使用统一网格和 ItemsPanelTemplate?

标签: wpflistboxlistboxitem

解决方案


推荐阅读