ListView, содержащий GridViews и ListViews

У меня есть требование создать страницу xaml с семантическим масштабированием, где увеличенное представление содержит как GridViews, так и ListViews. Я начал с базового шаблона грид-приложения.

Чтобы попытаться добиться этого, я сделал увеличенное представление элемента управления Semantic Zoom, отображающее представление списка, а представление списка содержит элементы управления ListView и GridView, которые мне нужны для фактического отображения данных как ListViewItems. Это работает до определенного момента - проблема в том, что анимация мыши или нажатия происходит на всем дочернем элементе управления родительского ListView, а не на дочерних элементах. Такой макет был бы простым, если бы мне не нужно было поддерживать семантическое масштабирование.

Итак, мой вопрос: это лучший способ добиться такого макета, или я что-то упустил. Если это лучший способ, можно ли управлять поведением, чтобы дочерние элементы элемента имели правильный эффект анимации при выборе?

Дополнительная информация

Выбор GridView или ListView зависит от типа элементов в коллекциях. В этом примере группы 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]

person ZombieSheep    schedule 05.06.2012    source источник
comment
Не могли бы вы уточнить? Является ли [g] элементом GridView или GridViewItem? Точно так же должен ли [элемент списка] быть ListView? Что является непосредственным дочерним элементом ZoomedInView SemanticZoom?   -  person Krishna    schedule 13.06.2012
comment
[g] действительно представляет собой элемент представления сетки, а [list_item] представляет собой элемент представления списка. В настоящее время моя разметка содержит SemanticZoom с увеличенным и уменьшенным представлением. Увеличенное представление в настоящее время имеет GridView в качестве единственного дочернего элемента и уменьшает масштаб ListView. Я знаю, что это не дает мне того, чего я хочу достичь.   -  person ZombieSheep    schedule 13.06.2012
comment
Итак, есть ли какая-то конкретная причина, по которой вы хотите, чтобы вещи были элементами сетки или элементами списка? Это то, что вам действительно нужно — просто разные макеты каждой группы в зависимости от типа объектов в группе? для например. макет упаковки для первой группы и вертикальный макет для второй в вашем случае и т. д.?   -  person Krishna    schedule 13.06.2012
comment
Вот, собственно, и суть проблемы, да. Я уже использую DataTemplateSelector для большинства своих нужд, и он работает хорошо. Проблема, однако, заключается в попытке контролировать размеры высоты и ширины элементов, их ColumnSpan и RowSpan в зависимости от типа элемента и т. д. Кажется, что это должно быть возможно, но прямо сейчас это причиняет мне столько боли, что я кажется, я вполне могу делать это неправильно - поэтому спрашиваю, возможен ли исходный сценарий.   -  person ZombieSheep    schedule 13.06.2012
comment
Вы пытались использовать ItemContainerStyleSelector для замены контейнера элементов на основе типа элемента или аналогичного? Таким образом, может быть, вы можете установить одну группу для контейнера макета упаковки, а другая может быть просто панелью стека?   -  person Krishna    schedule 14.06.2012
comment
Спасибо, Кришна. Кажется, это (ItemContainerStyleSelector) приближает меня к тому, что мне нужно. Если бы вы могли написать это как быстрый ответ, я могу принять его и дать вам награду. Спасибо за направление. :)   -  person ZombieSheep    schedule 14.06.2012
comment
Я сделал это ответом. Мне было бы интересно увидеть грубый XAML, который в конце концов работает :)   -  person Krishna    schedule 14.06.2012


Ответы (2)


Возможно, вы можете попробовать использовать ItemContainerStyleSelector для замены контейнера элементов на основе типа элемента или аналогичного? Таким образом, может быть, вы можете установить одну группу для контейнера макета упаковки, а другая может быть просто панелью стека?

person Krishna    schedule 14.06.2012

дизайн кажется мне разумным. проблема, с которой вы столкнулись, просто «можно ли контролировать поведение, чтобы дочерние элементы элемента имели правильный эффект анимации при выборе?»

проблема здесь в том, что вам, вероятно, не хватает абстракции в отношении разных уровней объекта пользовательского интерфейса. Я бы предположил, что вы написали этот большой элемент управления, просто используя один объект xaml, а затем испортили настройку стиля. На мой взгляд, вам нужно будет разбить свой пользовательский интерфейс на следующие уровни компонентов:

  1. ZoomPage // который по сути является списком
  2. GroupElement // который может быть объектом GRID или объектом списка в зависимости от DATACONTEXT
  3. GroupElement // который также имеет сводное состояние.

то, что вы указали, определенно может быть достигнуто, мне кажется, просто стили не развернуты должным образом, если действительно ваш элемент управления слишком сложен, разбейте его и протестируйте их отдельно.

надеюсь это поможет

person zinking    schedule 15.06.2012