Глава 8. Пользовательский ввод данных . . . . . . . . . . . . . . . . . . . . . 227
8.1. Отслеживание ввода с клавиатуры . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.2. Ввод мышью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
8.3. Использование мультитач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8.4. Рисование с помощью пера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.5. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Глава 9. Текст . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.1. Система работы с текстом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
9.2. Вывод текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
9.3. Встроенные шрифты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
9.4. Ввод и редактирование текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
9.5. Ввод и отображение насыщенного (форматированного) текста . . . . 265
9.6. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Глава 10. Элементы управления
и пользовательские элементы управления . . . . . . . . . . . . . . . . . 275
10.1. Элемент управления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
10.2. ContentControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.3. Элементы управления — кнопки . . . . . . . . . . . . . . . . . . . . . . . . . . 281
10.4. Списковые элементы управления . . . . . . . . . . . . . . . . . . . . . . . . . . 286
10.5. Создание пользовательских элементов управления . . . . . . . . . . . . 293
10.6. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Часть II. Структурирование
Глава 11. Связывание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1. Связывание данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
11.2. Понятие об источнике связывания . . . . . . . . . . . . . . . . . . . . . . . . . 308
11.3. Настройка отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
11.4. Создание шаблонов данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
11.5. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Глава 12. Элементы управления данными:
DataGrid и DataForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
12.1. DataGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
12.2. DataForm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
12.3. Аннотирование для отображения . . . . . . . . . . . . . . . . . . . . . . . . . . 347
12.4. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Глава 13. Валидация ввода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
13.1. Исходный код и пользовательский интерфейс
примера валидации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
13.2. Валидация свойств на основе исключений . . . . . . . . . . . . . . . . . . . 357
13.3. Синхронная валидация при помощи IDataErrorInfo . . . . . . . . . . . . . 360
13.4. Асинхронная валидация с применением INotifyDataErrorInfo . . . . . . 366
13.5. Аннотирование для валидации . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.6. Сравнение методов валидации . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
13.7. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Глава 14. Работа в сети и механизмы коммуникации . . . . . . . . . . 382
14.1. Доверие, безопасность и ограничения, присущие браузерам . . . . . 383
14.2. Соединение с источниками данных . . . . . . . . . . . . . . . . . . . . . . . . 389
14.3. Клиентский HTTP-стек . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
14.4. Обеспечение удобства работы с данными . . . . . . . . . . . . . . . . . . . 409
14.5. Использование усложненных служб . . . . . . . . . . . . . . . . . . . . . . . . 416
14.6. Соединение с другими приложениями Silverlight . . . . . . . . . . . . . . . 429
14.7. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Глава 15. Навигация и диалоговые окна . . . . . . . . . . . . . . . . . . . . . 434
15.1. Основы навигации в браузере . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
15.2. Шаблон навигационного приложения . . . . . . . . . . . . . . . . . . . . . . 438
15.3. Навигация по страницам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
15.4. Навигация вне браузера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
15.5. Отображение диалоговых и всплывающих окон . . . . . . . . . . . . . . . 461
15.6. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Глава 16. Структурирование и тестирование
с применением паттерна MVVM/ViewModel . . . . . . . . . . . . . . . . . 471
16.1. Настройка проекта и традиционный подход с выделением кода . . . 472
16.2. Основы паттерна Model-View-ViewModel . . . . . . . . . . . . . . . . . . . . . 481
16.3. Факторизация многократно используемого кода . . . . . . . . . . . . . . 490
16.4. Улучшенное разграничение с пользовательским интерфейсом . . . . 495
16.5. Тестирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
16.6. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Глава 17. Службы WCF RIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
17.1. Архитектура, инструментарий и шаблоны служб WCF RIA . . . . . . . . 520
17.2. Предоставление данных при помощи службы домена . . . . . . . . . . . 525
17.3. Фильтрация, сортировка, группирование
и разбивка на страницы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
17.4. Обновление данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
17.5. Слабое связывание: использование моделей представления . . . . . 560
17.6. Бизнес-логика . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
17.7. Аутентификация и авторизация . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
17.8. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Часть III. Окончательная доработка
приложения
Глава 18. Графика и эффекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
18.1. Класс Shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
18.2. Класс Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
18.3. Кисти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589
18.4. Эффекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
18.5. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
Глава 19. Печать . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
19.1. Как в Silverlight организована печать . . . . . . . . . . . . . . . . . . . . . . . 609
19.2. Печать содержимого экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
19.3. Выделенные деревья для многостраничной печати . . . . . . . . . . . . 624
19.4. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Глава 20. Отображение и запись медиаданных . . . . . . . . . . . . . . . 642
20.1. Аудио и видео . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
20.2. Плей-листы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
20.3. Интерактивное воспроизведение . . . . . . . . . . . . . . . . . . . . . . . . . . 659
20.4. Использование защищенного содержимого . . . . . . . . . . . . . . . . . . 662
20.5. Использование медийного фреймворка Silverlight . . . . . . . . . . . . . . 664
20.6. Работа с первичными ресурсами . . . . . . . . . . . . . . . . . . . . . . . . . . 667
20.7. Работа с веб-камерой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
20.8. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Глава 21. Работа с растровыми изображениями . . . . . . . . . . . . . . 692
21.1. Основы работы с изображением . . . . . . . . . . . . . . . . . . . . . . . . . . 692
21.2. Создание изображений во время исполнения . . . . . . . . . . . . . . . . . 693
21.3. Deep Zoom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
21.4. Работа с неиспользуемым пространством . . . . . . . . . . . . . . . . . . . . 707
21.5. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Глава 22. Анимация и поведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
22.1. Анимация: вопрос времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
22.2. Управление шкалой времени . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
22.3. Раскадровка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
22.4. Построение ключевых кадров . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
22.5. Функции плавности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
22.6. Поведения, триггеры и действия . . . . . . . . . . . . . . . . . . . . . . . . . . 741
22.7. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
Глава 23. Ресурсы, стили и шаблоны элементов управления . . . 746
23.1. Ресурсы в Silverlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746
23.2. Оформление элементов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
23.3. Создание шаблонов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
23.4. Работа с визуальными состояниями . . . . . . . . . . . . . . . . . . . . . . . . 769
23.5. Совместное использование визуальных состояний . . . . . . . . . . . . . 775
23.6. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
Глава 24. Создание панелей и элементов управления . . . . . . . . . 777
24.1. Создание пользовательской панели . . . . . . . . . . . . . . . . . . . . . . . . 778
24.2. Создание пользовательского элемента управления . . . . . . . . . . . . 789
24.3. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
Глава 25. Порядок установки и прелоадеры . . . . . . . . . . . . . . . . . . 799
25.1. Работа со сценариями вида «Silverlight не установлен» . . . . . . . . . 799
25.2. Создание пользовательского прелоадера . . . . . . . . . . . . . . . . . . . . 803
25.3. Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807
Приложение. Установка базы данных,
соединения и модели данных
Установка базы данных AdventureWorks . . . . . . . . . . . . . . . . . . . . . . . . . 809
Подключение к базе данных и понятие сущностей . . . . . . . . . . . . . . . . . 810
Выбираем создаваемые сущности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814