在VisualState中更改GridView GroupStyle

时间:2013-10-02 11:23:02

标签: xaml gridview windows-runtime winrt-xaml windows-8.1

在我的Windows 8.1 WinRT / XAML应用中,我有一个分组GridView,其中包含相应的GroupStyle

<GridView ItemsSource="{Binding Source={StaticResource groupedViewSource}}">
    ...
    <GridView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    ...
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <VariableSizedWrapGrid 
                         Style="{StaticResource NormalWrapGridStyle}" />
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </GridView.GroupStyle>
</GridView>

现在这是全屏视图的版本。我想要的是调整GridView的UI以获得更小的显示宽度,例如:在纵向模式下。因此,我希望将GroupStyle.HeaderTemplate调整为较小的标题,将GroupStyle.Panel调整为单个GridView组的边距较小。

通常情况下,我使用不同的VisualState进行此类UI调整,但似乎无法在VisualState中设置不同的GroupStyle或更改相应的模板。有什么建议吗?

3 个答案:

答案 0 :(得分:0)

什么阻止您使用不同的Gridview进行纵向方向?您可以检测隐藏/显示相应内容的当前方向,有关如何执行此操作的详细信息,请参阅我的博客文章http://www.zubairahmed.net/?p=1032

答案 1 :(得分:0)

我和@Zubair就这个问题。如果您可以为每个方向制作多个布局,则总体上可以获得更好的解决方案。如果您愿意,可以将它们抽象为用户控件。如果您愿意,可以重复使用数据模板。但是在单个布局中处理方向和监视器缩放是不必要的过度复杂性。

  

阅读本文:http://blog.jerrynixon.com/2013/12/the-two-ways-to-handle-orientation-in.html

如果您必须按照您的需要进行操作(我不建议您这样做),您可以查看此解决方案:http://xaml.codeplex.com/SourceControl/latest#MVA/201311_Blend/XamlSpace/ViewModels/MainPageViewModel.cs如果您愿意,可以下载整个项目。再说一遍,这不是我要做的。

答案 2 :(得分:0)

不幸的是,即使经过了这么多年,现在看起来仍然无法在W10 UWP上做到这一点。您必须求助于代码:

GridView.GroupStyle.Clear();

清除或

GridView.GroupStyle.Clear();
GridView.GroupStyle.Add((GroupStyle)Resources["YourGroupStyleKey"]);

无论如何都要从使用VisualStateManager.GoToState()的代码中进行设置。