【问题标题】:ListView containing GridViews and ListViewsListView 包含 GridViews 和 ListViews
【发布时间】:2012-06-09 10:50:26
【问题描述】:

我需要创建一个带有语义缩放的 xaml 页面,其中放大的视图包含 GridViews 和 ListViews。我已经开始使用基本的网格应用程序模板。

为了尝试实现这一点,我将 Semantic Zoom 控件的放大视图显示为列表视图,并且列表视图包含我需要将数据实际显示为 ListViewItems 的 ListView 和 GridView 控件。这在一定程度上可行 - 问题是鼠标按下或点击动画发生在父 ListView 的整个子控件而不是子元素上。如果我不需要支持语义缩放,这种布局会很简单。

所以,我的问题是这是实现这种布局的最佳方式,还是我遗漏了什么。如果这是最好的方法,是否可以控制行为以使子项元素对选择具有正确的动画效果?

附加信息

GridView 或 ListView 的选择取决于集合中项目的类型。在此示例中,grp 1、3 和 4(将显示在网格中)都是 NewsFull 类型的集合,其余的(显示在列表中)是 HeadlineOnly 类型的,这两种类型都继承自 NewsBase。

页面布局(放大)应该是这样的......

Title

grp 1         grp 2          grp 3            grp 4      grp 5
[g][g][g][g]  [_list item_]  [g][g][g][g][g]  [g][g][g]  [_list_item_]
[g][g][g][g]  [_list item_]  [g][g][g][g][g]  [g][g][g]  [_list_item_]
[g][g][g][g]  [_list item_]  [g][g][g][g]     [g][g]     [_list_item_]
[g][g][g]     [_list item_]  [g][g][g][g]     [g][g]                  

其中[g] 是网格视图项,[_list_item_] 是列表视图项。

缩小视图是这样的……

Title

grp 1      grp 2      grp 3      grp 4      grp 5
[summary]  [summary]  [summary]  [summary]  [summary]

【问题讨论】:

  • 你能澄清一下吗? [g] 是 GridView 还是 GridViewItem?同样,[list item] 是否意味着一个 ListView? SemanticZoom 的 ZoomedInView 的直接子代是什么?
  • [g] 确实是一个网格视图 item,而 [list_item] 是一个列表视图 item。目前我的标记包含一个 SemanticZoom,带有放大和缩小的视图。放大的视图当前有一个 GridView 作为其唯一的孩子,并缩小了一个 ListView。不过,我知道这并没有给我我想要实现的目标。
  • 那么,您是否有任何具体原因希望将事物设为网格视图项或列表视图项?您真正需要的是 - 只是根据组中对象的类型对每个组进行不同的布局?例如。在您的情况下,第一组的包装布局和第二组的垂直堆叠布局等?
  • 这几乎是问题的症结所在,是的。我已经在使用 DataTemplateSelector 来满足我的大部分需求,而且效果很好。然而,问题是试图控制项目的高度和宽度的大小,它们的 ColumnSpan 和 RowSpan 基于项目类型等。看起来应该是可能的,但现在它给我带来了如此多的痛苦看来我可能做错了 - 因此询问原始场景是否可能。
  • 您是否尝试过使用 ItemContainerStyleSelector 根据项目类型或类似类型换出项目的容器?这样,您是否可以将一个组设置为具有包装布局容器,而另一个可以只是一个堆栈面板?

标签: xaml listview gridview windows-8 semantic-zoom


【解决方案1】:

也许您可以尝试使用 ItemContainerStyleSelector 根据项目类型或类似内容换出项目的容器?这样,您是否可以将一个组设置为具有包装布局容器,而另一个可以只是一个堆栈面板?

【讨论】:

    【解决方案2】:

    这个设计在我看来是合理的。您遇到的问题仅仅是“是否可以控制行为以使子项元素在选择时具有正确的动画效果?”

    这里的问题是您可能缺乏关于不同级别的 UI 对象的抽象。我假设您只使用一个 xaml 对象编写了这个大控件,然后弄乱了样式设置。在我看来,您需要将您的 UI 分解为这些级别的组件:

    1. ZoomPage // 本质上是一个列表
    2. GroupElement // 根据 DATACONTEXT 可以是 GRID 对象或列表对象
    3. GroupElement // 还有一个摘要状态。

    您指定的肯定可以实现,在我看来只是样式没有正确部署,如果您的控件确实太复杂,请将其分解,并单独测试。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-02-25
      • 2013-04-18
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      相关资源
      最近更新 更多