GridView布局不同于Win8.1到Win10

时间:2016-02-29 18:53:17

标签: xaml gridview windows-10

我正在努力将Windows 8.1应用程序迁移到Windows 10通用应用程序,我在GridView中看到了不同的外观。

在Windows 8.1中,它的行为正确并显示两行(或更多,取决于高度): Windows 8.1 screenshot

然而,在Windows 10中,无论高度如何,我只得到一行: Windows 10 screenshot

GridView有足够的空间来包裹两行,但无论高度如何,它都是一行。两者都使用相同的XAML定义:

<GridView Name="MyGridView"
          Margin="0,50,0,0"
          IsItemClickEnabled="True"
          ItemsSource="{Binding AppPages}">
    ....
</GridView>

我在Windows 10应用程序中尝试了不同的ItemsPanel变体,但我得到1行水平布局或1列垂直布局。 Windows 10中是否有新属性或我需要设置的内容,以便{?1}}在高度允许时显示多行?

修改

所描述的行为仅使用默认的GridView设置。我也尝试了以下内容:

GridView

同时使用 <GridView.ItemsPanel> <ItemsPanelTemplate> <VariableSizedWrapGrid Orientation="Vertical" /> </ItemsPanelTemplate> </GridView.ItemsPanel> 方向和Vertical。但是Windows 8.1应用程序和Windows 10应用程序的布局都没有指定任何内容,只有Horizontal及其GridView。以下是ItemTemplate的整个XAML:

GridView

1 个答案:

答案 0 :(得分:1)

我可以看到您尝试使用VariableSizedWrapGrid作为ItemPanel,正如我所说,默认情况下,它在UWP应用和Win8中都使用ItemsWrapGrid作为ItemPanel。 1个应用程序,您可以在空白的uwp应用程序或空白的Windows 8.1应用程序中进行测试。

在使用VariableSizedWrapGrid作为ItemPanelGridView控制布局时,只需在两个应用中测试您的代码,因为它们位于您的照片中,不同于Win8.1到Win10。

所以我猜你可能会在代码中的某个地方使用VariableSizedWrapGrid使用GridView样式,例如当未定义样式的x:Key属性时,此样式可以应用于页面中的所有目标类型控件。

如果每个图块/单元格基于内容可变大小,通常我们会使用VariableSizedWrapGrid。但是,根据您的图片,我认为GridView的每个项目都有相同的尺寸。

所以在这种情况下,您可以像这样修改样式:

<Page.Resources>
    <Style x:Key="GridViewStyle1" TargetType="GridView">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

并将这种风格专门应用于GridView,如下所示:

<GridView x:Name="MainGridView"
          Style="{StaticResource GridViewStyle1}"
          ItemsSource="{Binding AppPages}"
          IsItemClickEnabled="True"
          SelectionMode="None">