Presentation Platform features at work. Silverlight vs. WPF by Ivan Kirkorau, EPAM Systems

advertisement
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: ivan_kirkorau@epam.com
Download