【发布时间】: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