我正在开发一个Windows 8 Metro应用程序,其布局非常简单。它由一个WrapGrid
括在ItemsControl
中的单个页面组成,而ScrollViewer
又包含在<Page ...>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Grid x:Name="MainGrid" Margin="120,140,32,0">
<ScrollViewer x:Name="ScrollView"
VerticalScrollBarVisibility="Auto"
HorizontalAlignment="Stretch">
<ItemsControl x:Name="itemsControl" HorizontalAlignment="Stretch">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapGrid Orientation="Horizontal"
HorizontalChildrenAlignment="Stretch"
Margin="0"
HorizontalAlignment="Center">
<WrapGrid.ChildrenTransitions>
<TransitionCollection>
<EntranceThemeTransition />
<RepositionThemeTransition />
</TransitionCollection>
</WrapGrid.ChildrenTransitions>
</WrapGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</ScrollViewer>
</Grid>
<Page.BottomAppBar>
...
</Page.BottomAppBar>
</Page>
中。这是应用程序主页的XAML代码:
WrapGrid
当用户单击应用程序栏中的某个按钮时,还有一个用户控件,用于创建新实例并以编程方式添加到ItemsControl。正如使用ItemsControl
所预期的那样,控件实例按顺序堆叠在一行中,直到屏幕上没有空间,此时它们出现在一个新行中,需要向下滚动为了看到他们。到目前为止一切都很好。
现在我想实现一个功能,但我不知道如何实现它。我想要的是以下内容:当用户缩小应用程序时,导致控件显得更小,我希望使用新的可用空间,以便每行可以显示更多控件;相反,当前的行为是ItemsControl
本身被减少,额外的周围空间未被使用。
例如,假设用户添加了10个控件。一行中有4个控件的空间,因此显示3行控件,包含4个,4个和2个控件。如果用户缩小,现在连续有7个控件的空间,我希望{{1}}重新排列自己,这样现在只有两行有7和3个控件。我怎么能做到这一点?
我希望我已经正确地解释了自己。如果我的问题不够清楚,请不要犹豫。非常感谢你!