Presentation Platform features at work. Silverlight vs. WPF by Ivan Kirkorau, EPAM Systems Зачем я изучаю Silverlight? • Моя работа – обучать коллег технологиям MS • Мне нравится программировать на Silverlight • Эта технология достойна того, чтобы разобраться, как она работает внутри. Кто из вас изучает Silverlight/WPF? Я часто слышал вопрос: Имеют ввиду фичи Presentation Platform • • • • • • • • • Dependency Properties, Attached Properties Expressions XAML, Markup Extensions Resource Dictionaries Styles and Templates Content Model, Data Templates Layout System, Data Binding Triggers, Animation Etc… Мы выберем несколько: • • • • • • • • • Dependency Properties, Attached Properties Expressions XAML, Markup Extensions Resource Dictionaries Styles and Templates Content Model, Data Templates Layout System, Data Binding Triggers, Animation Etc… Silverlight против WPF • Silverlight – это «часть» WPF • Многие классные возможности отсутствуют • Но мы найдем обходной путь! WPF Silverlight: • Browsers • Windows Phone 7 Шаг 1. Ресурсы • XAML ресурсы задаются в ResourceDictionary ▫ Dictionary: значит есть «ключ» - «значение» • Каждый FrameworkElement имеет Resources Итого: XAML образует дерево контролов. У каждого по коллекции ресурсов. Доступ к ресурсам отличается в WPF и Silverlight. Шаг 2. Поведение ContentControl • Есть свойства Content и ContentTemplate • ContentTemplate типа DataTemplate • DataTemplate определяет внешний вид, для отображения не UIElement-ов. Да Content is UIElement? Нет Шаг 2. Поведение ContentControl Render UIElement Да Шаг 2. Поведение ContentControl • Content просто CLR класс Нет Да Content is UIElement? Шаг 2. Поведение ContentControl • ToString или DataTemplate? Нет • ToString() • TextBlock с результатом • Render Нет Has Data Template? Да Шаг 2. Поведение ContentControl • Установлен Data Template так или иначе. Да • Создается дерево элементов из Data Template • Прикрепляется как child • Content биндится на DataContext • Отображается Шаг 3. “Default” resources • Идея: создать ресурс, который автоматически подхватят все контролы одного типа. (По-умолчанию) • Подвержены ресурсы типов: ▫ Style ▫ DataTemplate (WPF only) • Как они находят друг друга? ▫ Type -> Key -> ResourceDictionary Применение. Хочу: • Уменьшение количества кода • Независимость UI элементов и модели • Автоматическое нахождение правильного UI • Тестируемость кода ContentControl как placeholder Title Content Control <пусто> CLR объекты модели Title Content Control <пусто> new User(“John”) new User(“John”) new User(“John”) DataTemplate с реальным UI Title Content Control <пусто> new User(“John”) new User(“John”) new User(“John”) .Content = User; Title Content Control User: “John” new User(“John”) new User(“John”) new User(“John”) Реализация в коде. (WPF) Silverlight не может этого • • • • • Нет DataType для DataTemplate Нет x:Type markup extenstion Нет ContentTemplateSelector Нет FindResource() … Что можно сделать? Вывод – изучайте и пробуйте: • В Silverlight отсутствуют многие мощные механизмы WPF. Но всегда есть решение! Без понимания вы будете • Механизмы работы WPF/Silverlight очень «каменным молотком» интересны внутри. • Используйтеархитектуру Reflector, чтобы разобраться с создавать будущего. деталями. Но как ни странно, даже тогда у • Читайте книги. васкод! может получиться! • Пишите #devcamp Спасибо за внимание Сейчас я отвечу на ваши вопросы. Ivan Kirkorau Email: [email protected]