2014-09-20 69 views
3

我正在构建一个通用应用程序,我的Win8.1应用程序必须显示一个网格物品。通常情况下,网格由3列组成,但在较小的屏幕上,我希望项目能够包裹,因此只有2列(甚至1)。这是我的代码:Windows 8.1如何自动包装网格物品?

<GridView ItemsSource="{Binding Regions}" IsItemClickEnabled="True"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="3" MinWidth="400" /> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Margin="10"> 
       <Image Source="{Binding Code, Converter={StaticResource FlagIconConverter}, ConverterParameter='/Assets/Icons/Flags/{0}.png'}" Width="30" /> 
       <TextBlock Text="{Binding NativeName}" Style="{StaticResource BodyTextBlockStyle}" Margin="10,0,0,10" VerticalAlignment="Center" /> 
      </StackPanel> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

每当我使应用程序变小,项目不会自动换行。我试图通过更改MaximumRowsOrColumns财产VisualStateManager解决此问题,但由于某些原因无法访问我的WrapGrid不起作用。从代码隐藏更改属性也不起作用,因为它再次无法访问WrapGrid。

我试了这个既WrapGridItemsWrapGrid(有什么区别?)和ListViewGridView。那里没有区别。

有谁知道如何做到这一点?

回答

5

你应该不需要做任何事情。它应该基于可用的客户区进行换行。我能想到的唯一的事情就不会让它包裹的是,你把你的<GridView>固定宽度容器或容器是尺寸Auto中,你不更新观察集合通知网格重绘内/更新自己。

例如,这不会换行。

<Grid Width="1000"> 
    <GridView x:Name="myGridView" IsItemClickEnabled="True"> 
     <GridView.ItemsPanel> 
      <ItemsPanelTemplate> 
       <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="5"/> 
      </ItemsPanelTemplate> 
     </GridView.ItemsPanel> 
     <GridView.ItemTemplate> 
      <!-- DATATEMPLATE --> 
     </GridView.ItemTemplate> 
    </GridView> 
</Grid> 

但是摆脱Width=1000的,它会换行。

实施例3个的输出大小不同

enter image description here

+0

这就是奇数。树看起来像这样:''''''''Grid' - >'GridView'。它所在的网格列的宽度为Auto。没有固定的宽度。尽管如此,当我将窗口变小时,它看起来像这样:http://i.imgur.com/huNUA6Q.png。 – 2014-09-21 11:22:20

+0

嗯,发现问题。这是因为我把wrapgrid内1列在那里我有3列(等等wrapgrid的每一侧一个额外的列。之后我设置的columnspan 3,它开始包装像它应该的。如果你可以更新你的答案,包括这一点,我会接受它:) – 2014-09-21 11:25:11

+0

甜:)'Auto'大小将作为固定大小相同的效果。网格只会计算一次大小......除非绑定的集合发生变化。所以调整应用程序不会影响它。将你的'Auto'改为'*',你可以调整你的App的大小,它会改变网格的换行。 :),我会更新解决方案以避免Auto。 – 2014-09-21 11:48:23