使用WrapGrid的Uwp Grouped GridView

问题描述 投票:1回答:1

我正在开发一个UWP应用程序,我正在尝试在每个gridview组中水平对齐我的项目

我有这个 :

GROUP 1

Data 1 | Data 2 | Data 3

Data 1 | Data 2 | Data 3

Data 1 | Data 2 | Data 3

GROUP 2

Data 1 | Data 2 | Data 3

Data 1 | Data 2 | Data 3

我想要这个:

GROUP 1

______________________________Data 1 | Data 2 | Data 3

______________________________Data 1 | Data 2 | Data 3

______________________________Data 1 | Data 2 | Data 3

GROUP 2

______________________________Data 1 | Data 2 | Data 3

______________________________Data 1 | Data 2 | Data 3

我命令对齐我的项目我使用WrapGrid。我也试过非分组gridview,我的代码工作正常。

<GridView Grid.Column="0" ItemsSource="{Binding Source={StaticResource GroupBycodeFamille}}" ItemTemplate="{StaticResource DataTempateCatalogue}">
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="viewModels:GroupInfoList">
<TextBlock Text="{x:Bind Key}" Style="{ThemeResource TitleTextBlockStyle}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</GridView.GroupStyle>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal" HorizontalAlignment="Center"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
c# xaml gridview uwp windows-store
1个回答
6
投票

你可以通过设置GroupStyle.Panel property来获得你想要的东西。此属性设置一个模板,用于创建用于布置项目的面板。但GridViewItem has two templates,当GridViewItemsPanelItemsWrapGrid(默认)或ItemsStackPanel时,GridViewItem使用模板使用GridViewItemPresenter而不是UIElement树来改善网格性能。在使用此模板时,设置GroupStyle.Panel属性不会影响GridView。我们需要GridViewItem使用它的第二个模板,将GridViewItemsPanel设置为其他Panel。当你的组垂直对齐时,我们可以将GridViewItemsPanel设置为:

<GridView.ItemsPanel>
    <ItemsPanelTemplate>
        <StackPanel HorizontalAlignment="Center" Orientation="Vertical" />
    </ItemsPanelTemplate>
</GridView.ItemsPanel>

然后我们可以用左GroupStyle.Panel设置Margin来实现你的目标。但请注意:

为GroupStyle.Panel属性中的ItemsPanelTemplate声明的模板的根元素不能是虚拟化面板。虚拟化面板定义为源自VirtualizingPanel的任何类型,例如VirtualizingStackPanel类。

所以我们不能在这里使用WrapGrid,我们可以使用StackPanel,但项目将被排列成一行。要将项目排列成多行,我们需要在WPF中使用像Panel这样的WrapPanel。我们可以自定义它或使用像WrapPanel中的第三方WinRTXamlToolkit。以WinRTXamlToolkit为例:

xmlns:toolkit="using:WinRTXamlToolkit.Controls"

<GroupStyle.Panel>
    <ItemsPanelTemplate>
        <toolkit:WrapPanel Margin="200,0,0,0" Orientation="Horizontal" />
    </ItemsPanelTemplate>
</GroupStyle.Panel>

完整的XAML代码可能如下:

<GridView Grid.Column="0" ItemsSource="{Binding Source={StaticResource GroupBycodeFamille}}" ItemTemplate="{StaticResource DataTempateCatalogue}">
    <GridView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate x:DataType="viewModels:GroupInfoList">
                    <TextBlock Text="{x:Bind Key}" Style="{ThemeResource TitleTextBlockStyle}"/>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <toolkit:WrapPanel Margin="200,0,0,0" Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </GridView.GroupStyle>
    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel HorizontalAlignment="Center" Orientation="Vertical" />
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>
</GridView>

以下是我在我身边测试时的输出:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.