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

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

Edible Tape
Escape Vehicle (Air) 7=
Extracting Tool
Escape Vehicle (Water)
Communications Device
Persuasive Pencil
Multi-Purpose Rubber Band
Universal Repair System
Effective Flashlight
The Incredible Versatile Paperclip
Toaster Boat
Multi-Purpose Towelette
Minhtw Minhtw Ppn
Рис. 17.9. Выделение чередующихся строк с помощью селектора стилей
Чтобы создать селектор стиля, нужно создать класс, унаследованный от класса System.Windows.Controls.StyleSelector и переопределяющий метод SelectStyle(). Метод SelectStyle() работает точно так же, как и метод SelectTempate() в селекторе шаблонов, но только возвращает не объект DataTemplate, а объект Style.
Ниже показан селектор стилей, применяющий к нечетным строкам один стиль, а к четным — другой. Для обеспечения возможности многократного использования оба стиля не жестко кодируются, а предоставляются с помощью свойств.
public class AlternatingRowStyleSelector : StyleSelector {
public Style DefaultStyle {
get; set;
}
public Style AlternateStyle {
get; set;
}
// Отслеживаем индекс строки. private int i = 0;
public override Style SelectStyle(object item, DependencyObject container)
{
// Сбрасываем значение счетчика, если это первый элемент.
ItemsControl ctrl = ItemsControl.ItemsControlFromItemContainer(container); if (item == ctrl.Items[0])
{
i = 0;
}
i + + ;
// Выбираем один из двух стилей на основании текущей позиции. if (i % 2 == 1)
{
return DefaultStyle;
}
else
{
return AlternateStyle;
}
}
}
Book Pro WPF-2.indb 544
1:10:51
Шаблоны данных, представления данных и поставщики данных 545
Чтобы получить результат, показанный на рис. 17.9, осталось только определить стили, которые должны использоваться. В этом примере для каждого элемента с нечетным номером сохраняются параметры стандартного стиля. Следовательно, предоставить нужно только стиль, который должен использоваться для четных элементов:
<Style x:Key="AlternateStyle">
<Setter Property="ListBoxItem.Background" Value="GoldenrodYellow" ></Setter>
</Style>
Теперь этот стиль можно использовать для настройки селектора AlternatingRow StyleSelector, который применяется к данному списку:
<ListBox Grid.Row="1" Margin="7,3,7,10" Name="lstProducts" DisplayMemberPath="ModelName">
<ListBox.ItemContainerStyleSelector>
<local:AlternatingRowStyleSelector
AlternateStyle="{StaticResource AlternateStyle}" /> </ListBox.ItemContainerStyleSelector>
</ListBox>
Как и селекторы шаблонов, селекторы стилей вычисляются только тогда, когда элемент добавляется в список впервые. В случае добавления новых элементов в список между уже существующими элементами форматирование чередующихся строк будет утрачено. Решить эту проблему можно, вручную очистив селектор стилей (путем установки для свойства ItemContainerStyleSelector значения null) и затем применив его снова.
Изменение компоновки элемента
Шаблоны данных и селекторы стилей предлагают удивительные возможности для управления каждым аспектом представления элемента. Однако они не позволяют изменять порядок, в котором элементы располагаются по отношению друг к другу. Какие бы шаблоны и стили не использовались, ListBox помещает каждый элемент в отдельную горизонтальную строку и затем выстраивает эти строки друг за другом для создания списка.
Эту компоновку можно изменить, заменив контейнер, который элемент управления ListBox использует для размещения своих дочерних элементов. Делается это путем установки свойства ItemsPanelTemplate с помощью XAML-кода, определяющего панель, которая должна применяться. В роли такой панели может выступать любой класс, который наследуется от System.Windows.Controls.Panel.
Ниже показан пример использования панели WrapPanel для компоновки элементов в соответствии с доступной шириной элемента управления ListBox (рис. 17.10).
<ListBox Margin="7,3,7,10" Name="lstProducts"
ItemTemplate="{StaticResource ItemTemplate}" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel></WrapPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Для того чтобы этот подход работал, необходимо также обязательно установить для прикрепленного свойства ScrollViewer.HorizontalScrollBarVisibility значение Disabled. Это гарантирует, что элемент ScrollViewer (который элемент управления ListBox использует автоматически) никогда не будет использовать горизонтальную полосу прокрутки. Без этой детали панель WrapPanel будет иметь бесконечную ширину
Book_Pro_WPF-2.mdb 545 19.05.2008 18:10:51
546 Глава 17
для размещения своих элементов и, следовательно, станет эквивалентной горизонтальной панели StackPanel.
Рис. 17.10. Мозаичное расположение элементов в области отображения списка
Представления данных
Теперь, когда мы рассказали об искусстве создания шаблонов данных, можно переходить к следующей части картины привязки данных: представлениям данных.
При привязке коллекции (или объекта DataTable) к ItemsControl на заднем плане потихоньку создается представление данных. Это представление данных размещается между источником данных и привязанным элементом управления. Представление данных — это своего рода “окно” в источник данных. Оно отслеживает текущий элемент и поддерживает возможности сортировки, фильтрации и группирования. Эти возможности от самого объекта данных не зависят, что означает, что одни и те же данные можно привязывать разными способами в разных частях окна (или разных частях приложения). Например, одну и ту же коллекцию продуктов можно было бы привязать к двум разным спискам, но отфильтровать их так, чтобы в них отображались разные записи.
Предыдущая << 1 .. 270 271 272 273 274 275 < 276 > 277 278 279 280 281 282 .. 473 >> Следующая