2013-02-27 2 views
2

У меня есть ListView, как это:Styling ListView.SelectedItem - Windows Store App

<ListView ItemsSource="{Binding Source}" SelectionMode="Single" 
ItemTemplate="{StaticResource MyItemTemplate}" 
IsItemClickEnabled="True" ItemClick="ListView_OnItemClick"> 
</ListView> 

То, что я хочу добиться, чтобы стиль элемента, который выбран/нажал на что-то другое, чем другие элементы, и обратно, когда выбран другой элемент. Самый простой способ для меня был бы, если есть способ изменить DataTemplate выбранного элемента. Если это невозможно, любое решение очень ценится.

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

ответ

4

DataTemplateSelector предназначен для использования, когда изменений данных типа. Например, предположим, что у вас есть базовый класс Лицо и два унаследованных класса Профессор и Студент. У вас может быть коллекция под названием Люди, которые содержат как профессоров, так и студентов. Вы должны использовать DataTemplateSelector для использования одного шаблона данных при показе объектов профессора, а другой - для отображения объектов-учеников.

DataTemplateSelector и DataTemplate, вероятно, не то, что вы хотите, потому что они обычно не имеют ничего общего с выбором. Все элементы пользовательского интерфейса, которые вы видите, когда выбран элемент (проверка, фиолетовая рамка и т. Д.), Являются частью ItemContainer. Во время выполнения DataTemplate находится внутри ItemContainer, который вы можете изменить, отредактировав ContainerTemplate.

В Expression Blend щелкните правой кнопкой мыши на ListView и выберите Редактировать дополнительные шаблоны -> Редактировать сгенерированный контейнер элементов (ItemContainerStyle) -> Изменить копию. Вам нужно указать свой пользовательский контейнер, и я рекомендую сохранить его на уровне приложения вместо текущей страницы (иначе вы не сможете использовать его на других страницах).

После того, как вы дадите ему имя и нажмите OK, Blend переключится в режим редактирования контейнера (вместо страницы). Убедитесь, что у вас есть Головки открытая панель (Window -> States, если вы ее не видите), и вы должны увидеть кучу состояний. Тот, который вы хотите отредактировать, называется Выбрано и находится в группе SelectionStates.

Когда вы закончите внесения изменений, нажмите на кнопку в верхней части объектов и временной шкалы панель, которая выглядит как горизонтальная линия с стрелкой вверх (при наведении на эту кнопку, он будет говорить «Возвращение [Страница] «). Теперь вы вернетесь к редактированию своей страницы вместо редактирования контейнера. Запустите приложение, и вы увидите различия.

Примечание: Используя этот метод вы можете что-то изменить относительно контейнера .Такие вещи, как рамка, или сделать элемент больше или меньше или наклонены в трехмерном пространстве (используйте «Проецирование» в группе Transform на панели свойств для наклона). Однако вы не сможете показывать или скрывать части DataTemplate. Например, вы не сможете скрыть первое имя клиента, когда они не будут выбраны. Для тех видов изменений вам, вероятно, придется попробовать что-то со своим собственным DataTemplateSelector. Но я не знаю, можно ли проверить, выбран ли элемент, когда DataTemplateSelector предлагается сгенерировать шаблон.

Dev, поддержка дизайн и более удивительным добра на пути: http://bit.ly/winappsupport

+1

Ах, я вижу. Это то, что мы закончили, делаю btw, и это работает. Большое спасибо! –