Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 269 270 271 272 273 274 < 275 > 276 277 278 279 280 281 .. 473 >> Следующая

"{Binding Path=ProductImagePath, Converter={StaticResource ImagePathConverter}}"> </Image>
<Button FontWeight="Regular" HorizontalAlignment="Right" Padding="1" Tag="{Binding}">View Details...</Button>
</ StackPanel>
</StackPanel>
</Border>
</DataTemplate>
Внутри элемента Border находится элемент StackPanel, удерживающий все содержимое. Внутри этого элемента StackPanel, в свою очередь, находится второй элемент StackPanel, включающий содержимое, которое должно отображаться только для выбираемых элементов и состоит из описания, изображения и кнопки. Скрыть эту информацию можно, установив стиль внутреннего (т.е. второго) элемента StackPanel с помощью триггера, как показано ниже.
<StackPanel>
<StackPanel.Style>
<Style>
<Style.Triggers>
<DataTrigger
Binding=”{Binding Path=IsSelected, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}
}}”
Value="False">
<Setter Property="StackPanel.Visibility" Value="Collapsed" /> </DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBlock Margin="3" Text="{Binding Path=Description}"
TextWrapping="Wrap" MaxWidth="250" HorizontalAlignment="Left"></TextBlock> <Image Source=
"{Binding Path=ProductImagePath, Converter={StaticResource ImagePathConverter}}"> </Image>
<Button FontWeight="Regular" HorizontalAlignment="Right" Padding="1" Tag="{Binding}">View Details...</Button>
</StackPanel>
Book_Pro_WPF-2.indb 542 19.05.2008 18:10:50
Шаблоны данных, представления данных и поставщики данных 543
В этом примере нужно использовать не обычный триггер, а DataTrigger, потому что вычисляемое свойство находится в предшествующем элементе и получить к нему доступ можно только с помощью выражения привязки данных.
Теперь при изменении значения свойства ListBoxItem.IsSelected на False значение свойства StackPanel.Visibility будет изменяться на Collapsed и приводить к сокрытию лишних (развернутых) деталей.
На заметку! С технической точки зрения, разворачиваемые детали присутствуют всегда, но просто в скрытом виде. Из-за этого дополнительные накладные расходы, связанные с генерацией этих элементов, будут присутствовать при первом создании списка, а не при выборе того или иного элемента в нем. В текущем примере это не играет особой роли, но в случае использования такого дизайна для очень длинного списка со сложным шаблоном не исключено значительное снижение производительности.
Селекторы стилей
Шаблоны данных являются наиболее мощными инструментами для изменения внешнего вида элементов в списке. Однако иногда они оказываются несколько излишней мерой. Например, может быть потребоваться не радикальное изменение компоновки и содержимого каждого элемента, а просто применение какого-то базового форматирования, например, изменения цветов переднего плана и фона или текста в списке. В таком случае гораздо логичнее использовать стиль.
В предыдущем разделе уже показывалось, как можно определить стиль так, чтобы он автоматически применялся к каждому контейнеру элементов (вроде ListBoxItem, ComboBoxItem и т.д.) Для этого требуется всего лишь установить свойство ListBox. ItemContainerStyle. Для установки свойств в ListBoxItem, как и в любом другом стиле, можно использовать комбинацию элементов Setter. Задаваемое форматирование применяется к каждому элементу в списке, хотя с помощью триггеров можно сделать и так, чтобы оно изменялось в зависимости от других деталей, например, в зависимости от того, является ли элемент выбранным в текущий момент. Этот прием тоже демонстрировался в предыдущем примере.
Однако существует еще одна дополнительная возможность, которой можно воспользоваться — так называемый селектор стилей, работающий аналогично селектору шаблонов. Селектор стилей представляет собой специальный класс, в обязанности которого входит анализ каждого элемента и применение подходящего стиля. Он позволяет варьировать стиль, используемый для каждого объекта данных, на основе конкретной информации об этом объекте. Например, несложно создать селектор стилей, выделяющий текст дорогостоящих продуктов каким-то другим цветом. Добиться подобного эффекта возможно и с помощью селектора шаблонов, однако в данном случае все-таки больше подходит селектор стилей. А все дело в том, что подход с селектором шаблонов требует создания для дорогостоящих продуктов совершенно отдельного шаблона, что вынуждает дублировать некоторые детали из стандартного шаблона, и делает более сложным их изменение в будущем. Селектор стилей позволяет использовать один единственный шаблон и просто соответствующим образом настроить в нем несколько свойств.
Селекторы стилей часто используются для применения стиля чередующихся строк — другими словами, набора характеристик форматирования, отличающих каждый второй элемент в списке. Обычно для чередующихся строк устанавливается разный цвет фона, так чтобы они четко отличались друг от друга, как показано на рис. 17.9.
Book_Pro_WPF-2.mdb 543 19.05.2008 18:10:51
544 Глава 17
! 1 AlternatingBackground
Get Products
Rain Racer 2000 *
Предыдущая << 1 .. 269 270 271 272 273 274 < 275 > 276 277 278 279 280 281 .. 473 >> Следующая