分组的GridViewItems具有不同的高度和换行

分组的GridViewItems具有不同的高度和换行,gridview,windows-store-apps,winrt-xaml,Gridview,Windows Store Apps,Winrt Xaml,我的Windows应用商店应用程序有一个GridView,其中必须包含分组的GridViewItems,这些项的宽度相同,但根据其内容可以是任意高度。在每个组中,项目应该从上到下流动,然后在可用高度用完时,换行到下一列。整个GridView位于一个Grid行中,该行有一个星形(*)高度,我认为这给了它一个固定的垂直空间。所以我不明白为什么我在让项目包装并流入下一个专栏时遇到如此多的麻烦 我一直在尝试GridView.ItemsPanel和GroupStyle.Panel的ItemsPanelTe

我的Windows应用商店应用程序有一个
GridView
,其中必须包含分组的
GridViewItem
s,这些项的宽度相同,但根据其内容可以是任意高度。在每个组中,项目应该从上到下流动,然后在可用高度用完时,换行到下一列。整个
GridView
位于一个
Grid
行中,该行有一个星形(*)高度,我认为这给了它一个固定的垂直空间。所以我不明白为什么我在让项目包装并流入下一个专栏时遇到如此多的麻烦

我一直在尝试
GridView.ItemsPanel
GroupStyle.Panel
ItemsPanelTemplate
中的各种面板,但我无法实现所需的布局

除非我误解了
VariableSizedWrapGrid
的用法,否则在
面板
属性中使用它似乎是我所需要的。虽然它给了我正确的包装,但它不允许高度的变化。也就是说,每个项目的高度都设置为第一个项目的高度

我在
ItemsWrapGrid
中遇到的问题是,它将第一个单元格的高度应用于每个单元格

我尝试使用
VariableSizedWrapGrid
,其
方向
属性设置为
水平
,仅用于
GridView.ItemsPanel
属性(将
GroupStyle.Panel
保留为默认设置)。这使我可以改变我需要的物品高度。但是,这些项目不会流入每个组中的下一列。设置
MaximumRowsOrColumns
属性没有效果,但即使设置了,这也不是我想要的,因为包装应该取决于特定屏幕的高度,而不是XAML中设置的任意数字

我尝试过许多变体,但都没有成功。这就是XAML现在的样子

<Grid>
    <Grid.Resources>
        <CollectionViewSource x:Key="subItems" Source="{Binding SubItems}" IsSourceGrouped="True" ItemsPath="SubItems"/>
    </Grid.Resources>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Text="My Subheader" Style="{StaticResource SubheaderTextBlockStyle}" Margin="0,0,7,3"/>
    <GridView Grid.Row="1" ItemsSource="{Binding Source={StaticResource subItems}}" SelectionMode="None" Margin="0,3"
              ItemTemplateSelector="{StaticResource myTemplateSelector}">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <VariableSizedWrapGrid Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"/>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
                <GroupStyle.Panel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid/>
                    </ItemsPanelTemplate>
                </GroupStyle.Panel>
            </GroupStyle>
        </GridView.GroupStyle>
        <ItemsControl.ItemContainerStyle>
            <Style TargetType="GridViewItem">
                <Setter Property="Width" Value="294"/>
                <Setter Property="Margin" Value="0,5"/>
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ItemsControl.ItemContainerStyle>
    </GridView>
</Grid>


如何实现高度可变但在每个组中都包裹的分组单元格?

我找到了一个公认的答案,建议使用带端口的包裹。在那里使用的WrapPanel的宽度有问题,但我发现它也能正常工作。

你能为你的GridView和包含它的网格发布XAML吗?@ChrisLava:好的,我发布了。