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

Суворов С. "Танк Т-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 .. 268 269 270 271 272 273 < 274 > 275 276 277 278 279 280 .. 473 >> Следующая

Ниже показан готовый шаблон, который применяет в области изогнутой границы выбранный фон. Элемент Border размещается внутри элемента управления Grid с белым фоном, что исключает вероятность появления выбранного цвета в районе поля за пределами изогнутой границы. В результате стиль выбранного элемента получается гораздо более привлекательным, как показано на рис. 17.7.
<DataTemplate>
<Grid Margin="0" Background="White">
<Border Margin="5" BorderThickness="1"
BorderBrush="SteelBlue" CornerRadius="4"
Background="{Binding Path=Background, RelativeSource={
RelativeSource
Mode=FindAncestor,
AncestorType={x:Type ListBoxItem}
}}" >
<Grid Margin="3">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock FontWeight="Bold" Text="{Binding Path=ModelNumber}"></TextBlock> <TextBlock Grid.Row="1" Text="{Binding Path=ModelName}"></TextBlock>
</Grid>
</Border>
</Grid>
</DataTemplate>
Рис. 17.7. Выделение выбранного элемента
Book Pro WPF-2.indb 540
1:10:50
Шаблоны данных, представления данных и поставщики данных 541
Выбор и свойство SnapsToDevicePixels
Для уверенности в том, что шаблон будет отображаться корректно на компьютерах с другими системными параметрами экранного разрешения (например, со значением 120 dpi вместо стандартных 96 dpi), нужно внести еще одно изменение, а именно — установить значение true для свойства ListBox.SnapsToDevicePixels. Это исключит вероятность сглаживания края шаблона в случае его попадания между пикселями.
Если не установить для свойства SnapsToDevicePixels значение true, тогда между краем шаблона и краем содержащего его элемента управления ListBox будет возможным появление знакомой голубой границы. (Дополнительную информацию о дробных пикселях и том, почему они встречаются, когда для параметра экранного разрешения устанавливается значение, отличное от 96 dpi, можно почерпнуть в главе 1.)
Такой подход — использование для изменения шаблона выражения привязки — работает хорошо, если необходимое значение свойства можно извлечь из контейнера элемента. Например, это прекрасный вариант, если требуется извлечь цвет фона и изображения выбранного элемента. Однако он не столь удобен, если требуется изменить шаблон более серьезным образом.
Например, возьмем список продуктов, показанный на рис. 17.8. При выборе в этом списке какого-то продукта, соответствующий ему элемент разворачивается, преобразуясь из однострочного текста в поле с рисунком и полным описанием. Вдобавок, в этом примере еще также применяются две рассмотренных ранее технологии, а именно — показ содержимого типа изображений в шаблоне и использование привязки данных для установки цвета фона элемента Border при выборе продукта в списке. Чтобы создать подобный список, необходимо воспользоваться подходом, несколько отличающимся от продемонстрированного в предыдущем примере.
Свойство RelativeSource объекта Binding все равно должно применяться для поиска текущего элемента ListBoxltem. Однако извлекать цвет его фона больше не требуется. Вместо этого необходимо выполнить проверку на предмет того, является он выбранным или нет. Если нет, тогда лишнюю информацию можно скрыть путем установки его свойства Visibility.
Этот подход похож на тот, что демонстрировался в предыдущем примере, но кое в чем отличается от него. В предыдущем примере можно было просто выполнить привязку непосредственно к необходимому значению так, чтобы фон элемента ListBoxltem становился таким же, как и у объекта Border. А в данном случае требуется анализировать свойство ListBoxltem.IsSelected и устанавливать свойство Visibility другого элемента. Типы данных у этих свойств не совпадают: IsSelected представляет собой булевское значение, в то время как Visibility берет значение из перечисления Visibility. Из-за этого привязать свойство Visibility к свойству IsSelected нельзя (по крайней мере, без помощи специального конвертера IValueConverter). Возможное решение предполагает применение триггера данных так, чтобы при изменении свойства IsSelected элемента ListBoxItem, изменялось и свойство Visibility контейнера.
Book_Pro_WPF-2.mdb 541 19.05.2008 18:10:50
Рис. 17.8. Разворачивание выбранного элемента
542 Глава 17
Место в разметке, куда следует поместить этот триггер, тоже отличается. Размещать его в ItemContainerStyle больше не имеет смысла, поскольку нужно, чтобы скрывался не весь элемент, а только одна его часть, а раз так, то триггер должен быть частью стиля, применяемого только к одному контейнеру.
Ниже показана несколько упрощенная версия шаблона, в которой пока нет поведения автоматического разворачивания, и которая вместо этого просто отображает всю информацию (рисунок и описание) для каждого продукта в списке.
<DataTemplate>
<Border Margin="5" BorderThickness="1" BorderBrush="SteelBlue" CornerRadius="4">
<StackPanel Margin="3">
<TextBlock Text="{Binding Path=ModelName}"></TextBlock>
<StackPanel>
<TextBlock Margin="3" Text="{Binding Path=Description}"
TextWrapping="Wrap" MaxWidth="250" HorizontalAlignment="Left"></TextBlock> <Image Source=
Предыдущая << 1 .. 268 269 270 271 272 273 < 274 > 275 276 277 278 279 280 .. 473 >> Следующая