ListView包含GridViews和ListViews

时间:2012-06-05 12:04:04

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

我需要创建一个带语义缩放的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]

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

  1. ZoomPage //本质上是一个列表
  2. GroupElement //可以是GRID对象或列表对象,具体取决于DATACONTEXT
  3. GroupElement //也有摘要状态。
  4. 你明确指出的是什么,看起来我只是风格没有正确部署,如果确实你的控制太复杂,分解它,并单独测试它们。

    希望这会有所帮助