【问题标题】:Change GridView GroupStyle in VisualState在 VisualState 中更改 GridView GroupStyle
【发布时间】:2013-10-02 11:23:01
【问题描述】:

在我的 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 或更改相应的模板。有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 当然,这是一个简单的解决方案。但是:我不想复制我的 GridView 只是为了适应一些样式。这样做而不能用 VisualStates 做到这一点非常难看。
    • 我知道很多年过去了,但很清楚,即使这在当时可能是一种强迫的做法,但现在已经不是了。两个不同的控件不提供相同数据的视图。 MS 支持的官方方法是使用视觉状态来更改您需要更改的任何内容、样式或模板或两者,基于响应和自适应触发器或您自己的代码来更改状态。
    【解决方案2】:

    我和@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如果你喜欢,你可以下载整个项目。再说一次,这不是我会做的。

    【讨论】:

      【解决方案3】:

      不幸的是,即使是现在,在 W10 UWP 上经过这么多年之后,您似乎也无法做到这一点。你必须求助于代码:

      GridView.GroupStyle.Clear();
      

      清除或清除

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多