Xaml 包含GridView和ListView的ListView

Xaml 包含GridView和ListView的ListView,xaml,listview,gridview,windows-8,semantic-zoom,Xaml,Listview,Gridview,Windows 8,Semantic Zoom,我需要创建一个带有语义缩放的xaml页面,其中放大的视图同时包含GridView和ListView。我从基本网格应用程序模板开始 为了实现这一点,我让语义缩放控件的放大视图显示一个列表视图,而列表视图包含我需要实际将数据显示为ListViewItems的ListView和GridView控件。这在某种程度上是可行的-问题是鼠标按下或点击动画发生在父ListView的整个子控件上,而不是子元素上。如果我不需要支持语义缩放,这种布局会很简单 所以,我的问题是,这是实现这种布局的最佳方式,还是我遗漏了

我需要创建一个带有语义缩放的xaml页面,其中放大的视图同时包含GridView和ListView。我从基本网格应用程序模板开始

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

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

附加信息

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

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

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]                  
Title

grp 1      grp 2      grp 3      grp 4      grp 5
[summary]  [summary]  [summary]  [summary]  [summary]
其中,
[g]
是一个网格视图项,[\u list\u item\u]是一个列表视图项

缩小视图是这样的

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]                  
Title

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

也许您可以尝试使用ItemContainerStyleSelector根据项目类型或类似类型交换项目的容器?这样,您可以将一个组设置为具有包装布局容器,另一个组可以仅为stackpanel?

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

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

  • ZoomPage//本质上是一个列表
  • GroupElement//可以是网格对象或列表对象,具体取决于DATACONTEXT
  • GroupElement//也具有摘要状态
  • 您指定的内容肯定可以实现,在我看来只是样式没有正确部署,如果您的控件确实太复杂,请将其分解,并单独测试它们


    希望这有帮助

    您能澄清一下吗?[g]是指GridView还是GridViewItem?同样,[list item]是否意味着是一个ListView?SemanticZoom的ZoomedInView的直接子项是什么?[g]实际上是一个网格视图项,[list_item]是一个列表视图项。当前我的标记包含一个SemanticZoom,具有放大和缩小视图。放大视图当前将GridView作为其唯一子视图,并缩小了ListView。不过,我知道这并没有给我想要实现的目标。那么,有什么具体的原因让你想要gridview项目或列表视图项目呢?是您真正需要的-只是根据组中对象的类型,每个组的不同布局?例如,在您的案例中,第一组的包装布局和第二组的垂直堆叠布局等?这几乎是问题的症结所在,是的。我已经在使用DataTemplateSelector来满足我的大部分需求,而且效果很好。然而,问题是试图控制项目的高度和宽度大小,根据项目类型控制项目的列跨度和行跨度等。这似乎是可能的,但是现在它给我带来了太多的痛苦,以至于我似乎用了错误的方法——因此询问原始场景是否可行。您是否尝试过使用ItemContainerStyleSelector根据项目类型或类似内容交换项目的容器?这样,您可以将一个组设置为具有包装布局容器,而另一个组仅可以是stackpanel?