2

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

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

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

附加信息

GridView 或 ListView 的选择基于集合中项目的类型。在这个例子中,grp 1、3 和 4(显示在网格中)都是 typeNewsFull的集合,其余的(显示在 Lists 中)是 type 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]
4

2 回答 2

1

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

于 2012-06-14T13:53:23.113 回答
1

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

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

  1. ZoomPage // 本质上是一个列表
  2. GroupElement // 可以是 GRID 对象或列表对象,具体取决于 DATACONTEXT
  3. GroupElement // 它也有一个摘要状态。

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

希望这可以帮助

于 2012-06-15T03:57:58.657 回答