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。
我试了这个既WrapGrid
和ItemsWrapGrid
(有什么区别?)和ListView
和GridView
。那里没有区别。
有谁知道如何做到这一点?
这就是奇数。树看起来像这样:''''''''Grid' - >'GridView'。它所在的网格列的宽度为Auto。没有固定的宽度。尽管如此,当我将窗口变小时,它看起来像这样:http://i.imgur.com/huNUA6Q.png。 – 2014-09-21 11:22:20
嗯,发现问题。这是因为我把wrapgrid内1列在那里我有3列(等等wrapgrid的每一侧一个额外的列。之后我设置的columnspan 3,它开始包装像它应该的。如果你可以更新你的答案,包括这一点,我会接受它:) – 2014-09-21 11:25:11
甜:)'Auto'大小将作为固定大小相同的效果。网格只会计算一次大小......除非绑定的集合发生变化。所以调整应用程序不会影响它。将你的'Auto'改为'*',你可以调整你的App的大小,它会改变网格的换行。 :),我会更新解决方案以避免Auto。 – 2014-09-21 11:48:23