【问题标题】:GridView and VariableSizedWrapGrid templating windows store appGridView 和可变大小的 Wrap Grid 模板 windows 商店应用程序
【发布时间】:2013-04-29 17:36:17
【问题描述】:

我正在编写一个 Windows 商店应用程序,主页是分组项目的 GridView。 我已经设法获得了 GridView 不同图块的模板, 但问题如下:

我已将 ItemsSource 绑定到包含 12 个项目的 viewModel 集合。 有2个不同的问题: 首先,我怎样才能使 GridView 始终不显示最后一个或两个项目,这样总有一个或两个缺失的图块,如图所示,尽管有界中有更多项目的“空间”收藏。

其次,我将 ItemTemplateSelector 用于基于索引的项目的不同模板。 我的设计是在最后一项中我需要选择一个没有图像的模板(例如)。 如何获取 GridView 中的最后一个可见项?

这是我创建不同大小的瓷砖的代码:

 protected override void PrepareContainerForItemOverride(Windows.UI.Xaml.DependencyObject element, object item)
        {
            try
            {
                IIndexable viewModel = item as IIndexable;
                element.SetValue(Windows.UI.Xaml.Controls.VariableSizedWrapGrid.ColumnSpanProperty, viewModel.Index == 0 ? 2 : 1);
                element.SetValue(Windows.UI.Xaml.Controls.VariableSizedWrapGrid.RowSpanProperty, viewModel.Index == 0 ? 2 : 1);
            }
            catch
            {
                element.SetValue(Windows.UI.Xaml.Controls.VariableSizedWrapGrid.ColumnSpanProperty, 1);
                element.SetValue(Windows.UI.Xaml.Controls.VariableSizedWrapGrid.RowSpanProperty, 1);
            }
            finally
            {
                base.PrepareContainerForItemOverride(element, item);
            }
        }

谢谢。

【问题讨论】:

    标签: c# xaml gridview windows-runtime windows-store-apps


    【解决方案1】:

    为此,您要么必须编写自己的控件,要么可以让视图模型(应该存储您的 itemssource)返回项目的子集。

    如果您确实编写了自己的控件,则需要覆盖 ArrangeOverride 和 MeasureOverride 方法。然后,您将能够创建诸如“MaximumColumns”之类的依赖属性。然后,您的 Arrange 和 Measure 方法可以根据是否有足够的空间来确定是否将孩子添加到树中。我建议创建一个二维布尔数组来跟踪哪些单元格被占用,然后使用“Fit”函数尝试查找是否有空间容纳您要添加的对象。

    为了返回项目的子集,您可以让视图模型计算每个项目将占用多少空间并返回适当项目的新集合,或者您可以将其硬限制为给定值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多