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