我正在构建一个通用应用程序,我的Win8.1应用程序必须显示一个项目网格。通常情况下,网格由3列组成,但在较小的屏幕上,我希望项目包装,以便只有2列(甚至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
尝试了这个。没有区别。
有谁知道如何做到这一点?
答案 0 :(得分:5)
你不需要做任何事情。它应该根据可用的客户区域进行换行。我唯一能想到的就是将你的<GridView>
放在一个固定宽度的容器或一个大小为Auto
的容器中不更新Observable Collection以通知Grid重绘/更新自己。
例如,这不会换行。
<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种不同的尺寸