首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Win8.1到Win10不同的Win10布局

与Win8.1到Win10不同的Win10布局
EN

Stack Overflow用户
提问于 2016-02-29 18:53:16
回答 1查看 114关注 0票数 0

我正在努力将Windows8.1应用程序迁移到Windows10通用应用程序,并且在我的GridView中得到了不同的外观。

在Windows 8.1中,它的行为正确,并显示两行(或更多与高度有关):

但是,在Windows 10中,不管高度如何,我只得到一行:

显然,GridView有足够的空间包装成两行,但是不管高度如何,它仍然是一行。两者都使用相同的XAML定义:

代码语言:javascript
复制
<GridView Name="MyGridView"
          Margin="0,50,0,0"
          IsItemClickEnabled="True"
          ItemsSource="{Binding AppPages}">
    ....
</GridView>

我在Windows 10应用程序中尝试过不同的ItemsPanel变体,但我要么得到1行水平布局,要么得到1列垂直布局。在Windows 10中是否有新的属性或我需要设置的东西,以便允许GridView在高度允许的情况下显示多行?

编辑

所描述的行为只是使用默认的GridView设置。我也尝试了以下几点:

代码语言:javascript
复制
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <VariableSizedWrapGrid Orientation="Vertical" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>

同时具有Vertical方向和Horizontal。但是Windows8.1应用程序和Windows 10应用程序的布局并没有指定任何内容,只有GridView和它的ItemTemplate。下面是GridView的整个XAML

代码语言:javascript
复制
        <GridView x:Name="MainGridView"
                  IsItemClickEnabled="True"
                  ItemsSource="{Binding AppPages}"
                  SelectionMode="None">
            <interactivity:Interaction.Behaviors>
                <core:EventTriggerBehavior EventName="ItemClick">
                    <core:CallMethodAction MethodName="GridViewItemClick" TargetObject="{Binding Mode=OneWay}" />
                </core:EventTriggerBehavior>
            </interactivity:Interaction.Behaviors>
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Border Width="200"
                            Height="200"
                            BorderBrush="White"
                            BorderThickness="2">
                        <Grid>
                            <Image Width="150"
                                   Height="150"
                                   VerticalAlignment="Bottom"
                                   Source="{Binding Path=ImageSource}" />
                            <TextBlock HorizontalAlignment="Center"
                                       FontSize="12"
                                       FontWeight="Bold"
                                       Foreground="White"
                                       Text="{Binding Path=PageName}" />
                        </Grid>
                    </Border>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemContainerStyle>
                <Style TargetType="GridViewItem">
                    <Setter Property="Margin" Value="10" />
                </Style>
            </GridView.ItemContainerStyle>
        </GridView>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-02 07:42:32

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

只是在这两个应用程序中测试了您的代码,当使用VariableSizedWrapGrid作为ItemPanel时,GridView控件的布局与Win10 8.1到Win10的布局不同,因为它们在您的图片中。

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

通常,如果每个瓷砖/单元格是基于内容的可变大小,则使用VariableSizedWrapGrid。但是从你的照片上看,我认为你的GridView的每一项都有相同的尺寸。

因此,在本例中,您只需修改样式如下:

代码语言:javascript
复制
<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

代码语言:javascript
复制
<GridView x:Name="MainGridView"
          Style="{StaticResource GridViewStyle1}"
          ItemsSource="{Binding AppPages}"
          IsItemClickEnabled="True"
          SelectionMode="None">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35707300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档