Document 5127754

advertisement
Александр Шер
Разработчик
ООО «Айко»
Microsoft TechDays
http://www.techdays.ru
Зачем WPF и XAML разработчику?
Styles & Templates
Bindings
RoutedEvents & InputBindings
Triggers – управление представлением
Практические заметки
Microsoft TechDays
http://www.techdays.ru
– WPF для тех, кому нужна излинше навороченная
графика
– Все это жудко тормозит
– Нет никакого дизайнера форм, а Blend надо покупать
отдельно
– Стандартных контролов мало, а контролы третьих
фирм надо для WPF покупать заново
– А что мне дает WPF как разработчику?
Microsoft TechDays
http://www.techdays.ru
WPF предоставляет очень много возможностей
для создания пользовательских интерфейсов
(Представление != Графика)
Какие из них использовать – решать Вам!
Большинство пользователей любит красивые
приложения
Microsoft TechDays
http://www.techdays.ru
WinForms порождает отдельный handle для
каждого элемента управления в окне, а WPF
использует всего один* – само окно
WPF умеет использовать 3D-ускоритель
Бизнес приложение не требует графики уровня
3D-шутера
Пример из жизни: приложение iiko Front для
кассовых терминалов создано на WPF и
работает на компьютерах с 1ГГц проц и 256Мб
памяти
Microsoft TechDays
http://www.techdays.ru
В сложных приложениях дизайнер WinForms
все равно со временем «отваливается»
WPF позволяет легко создавать
пользовательские интерфейсы без дизайнера
Blend входит в MSDN Premium, а «коробка»
стоит меньше 100$
Microsoft TechDays
http://www.techdays.ru
В WPF логика контрола полностью отделена от
представления
Во многих случаях в отдельном контроле нет
необходимости – достаточно настроить
Template
Чарты, гриды и красивые элементы управления
легко создаются в WPF стандартными
средствами
DataGrid и Calendar уже есть
(http://www.codeplex.com/wpf/)
Microsoft TechDays
http://www.techdays.ru
WPF действительно позволяет отделить
представление от логики и данных
«Чистая» реализация паттернов вроде MVC
Покрытие юнит-тестами
Разработка UI параллельно с логикой
Механизмы стилей и шаблонов значительно
повышают code reuse
Более 90% всего, что связано с
представлением, создается декларативно
Microsoft TechDays
http://www.techdays.ru
WPF позволяет хранить в ресурсах экземпляр
любого объекта с ключом любого типа
Словарь ресурсов может ссылаться на другие
словари
Любой контрол, стиль или темплейт имеет свой
словарь ресурсов
Microsoft TechDays
http://www.techdays.ru
Стиль – это набор ресурсов, значений свойств,
обработчиков событий и триггеров
Стили могут применяться явно или
автоматически в пределах любой области
видимости
Стили поддерживают наследование и
применение отдельных частей стиля в
зависимости от типа контрола
StyleSelector’ы позволяют применять стили в
соответствии с заданной логикой
Microsoft TechDays
http://www.techdays.ru
Темплейты позволяют полностью изменить
внешний вид контрола
Логика поведения контрола может
использовать именованные части темплейта
Элементы в темплейте могут использовать
значения свойств контрола
DataTemplateSelector’ы позволяют выбирать
темплейт в зависимости от данных
Microsoft TechDays
http://www.techdays.ru
XmlDataProvider – работа с XML
ObjectDataProvider – вызов методов и создание
экземпляров класса
CollectionViewSource – фильтрация,
сортировка, группировка
CompositeCollection – объединение коллекций
Microsoft TechDays
http://www.techdays.ru
В WPF можно привязать значение
DependencyProperty к любому набору
источников
Свойство не ReadOnly
FrameworkPropertyMetadata.IsNotDataBindable == false
Binding’и могут быть в любом направлении, с
конвертацией данных, с явным или
автоматическим обновлением, валидацией
Источник может быть задан явно, относительно
Binding’а или по имени
Microsoft TechDays
http://www.techdays.ru
DataContext позволяет привязывать данные к
иерархии объектов
DataContext наследует значение
Значение этого свойства у родителя передается
всем дочерним контролам, для которых оно не
задано явно
Binding’и других свойств объекта затем могут
быть заданы относительно DataContext’а
Microsoft TechDays
http://www.techdays.ru
Механизм RoutedEvents позволяет одним
контролам порождать команды, а другим
перехватывать и выполнять действия
Команды передаются по дереву контролов и
могут быть перехвачены несколькими
контролами
Обработчики для команд также могут
задаваться в стилях
WPF позволяет порождать команды с помощью
комбинации клавиш и нажатий кнопок мыши
(InputBindings)
Microsoft TechDays
http://www.techdays.ru
Триггеры позволяют декларативно описывать
измения свойства контролов и управлять
анимацией
Триггеры можно:
вешать на срабатывание событий или изменение
значений свойств
задавать на уровне контролов, стилей или
темплейтов
комбинировать с биндингами для полного контроля
над изменениями представления
Microsoft TechDays
http://www.techdays.ru
Используйте DataContext для поддерева
контролов, связанных с общим источником
данных
Выделяйте все повторяющиеся значения
свойств контролов в стили
Храните описание темплейтов как можно выше
в дереве контролов
Старайтесь подключать словари ресурсов на
уровне Application (если допускает Scope)
Активное использование RoutedCommands не
сильно, но снижает производительность
Microsoft TechDays
http://www.techdays.ru
CustomControl + Template предпочтительнее
UserControl
Используйте ValueConverter’ы и Selector’ы
DataTrigger + MultiBinding + Converter дает
больше контроля, чем MultiDataTrigger
Не ориентируйтесь на взаимное расположение
частей контрола
Старайтесь не использовать код в самом
представлении, но не делайте из этого табу!
Microsoft TechDays
http://www.techdays.ru
Раздел, посвященный WPF в MSDN:
http://msdn.microsoft.com/wpf
WPF на CodePlex:
http://www.codeplex.com/wpf
Собрание блоггеров (Dr. WPF, John Smith,
Beatriz Costa, etc.):
http://wpfdisciples.wordpress.com/
Microsoft TechDays
http://www.techdays.ru
Microsoft TechDays
http://www.techdays.ru
Download