(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

.Net: женим Portable Library и UI

Источник: habrahabr
Lincoln6Echo

Один контрол на всех, и все на одного: WPF, Silverlight 4-5, WinPhone 7-8, Windows Store App (x86, x64, ARM)

Сразу дискламер - это не Розеттский камень, а лишь хитрость, которая поможет, если у вас есть UserControl, почти идентичный для всех платформ.

Бонус - видео процесса разработки в конце статьи - статья простая и короткая, а видео 8 минут отличной музыки. Не у всех есть Windows8, многим наверное будет просто любопытно увидеть процесс в W8 + VS2012, поэтому заморочался.

Нам подарили Portable Library - отличная штука, сразу для всех платформ. Но, есть и ложка дёгтя - почти ничего, кроме числомолотилки и бизнес-процессов с этим не сварить, поддерживаемые неймспейсы подвели. 
Эта штука не только не знает что такое XAML, но не знает даже что такое Point! Куда уж проще, две координаты, X и Y - но это проблема, и предмет отдельного обсуждения с лучами ненависти к индусам и бардаку архитекторов.

Итак, мое первое знакомство с Portable Library случилось не лучшим образом - оно напомнило мне случай, когда девушка поднялась ко мне в диджейку и передразнила Аллегрову: "Я ждала тебя, так ждала, ты был мечтою моей фрустральною! " (Но там боссы корпоратива заказывали музыку..) 

Но я придумал, как побороть проблему с PL, которая назревала у моей будущей статьи про HSL Color Dialog, и эта статья - приставка к следующей статье, и туториал. 
Сразу оговорюсь, не во всех случаях поможет, в WinRT например нет Label, но везде есть TextBlock, "специфику платформ" придется соблюдать.

Краткое описание видео:

1. Создаем солюшн, и в нем проект WPF UserControl. Это будет наша песочница, именно в ней мы будем создавать и редактировать будущий универсальный контрол(ы). Сам по себе этот проект в продакшне не нужен, так-что лично я назвал его Sandbox и забил.
1а. Нас интересует только голый XAML. Удаляем из XAML наименование класса, удаляем сам файл .cs.
1б. Редактируем XAML, и он самое важное, это рабочий файл, годный для работы GUI-дизайнерам, в Бленде например.

2. Создаем проект Portable Library, выбираем из диалога нужные версии всего, что нам надо. 
2а. В проект PL добавить XAML с контролом из песочницы. Важно: добавить как Link на файл. Иначе все GUI-изменения в проекте песочницы над контролом придется руками перетаскивать каждый раз. 
2б. Добавленный линк на файл сделать Embedded Resource.
2в. Embedded Resource достается и передается в райнтайме так:
public class Class1 { public Stream GetXaml() { string[] names = this.GetType().Assembly.GetManifestResourceNames(); Stream s = this.GetType().Assembly.GetManifestResourceStream(names[0]); return s; } } Важно: PL не знает, что на самом деле передает, а принимающие приложения не знают достоверно, что это валидный XAML, так-что в продакшне важно обложиться проверками! Я их опустил, ради простоты кода.

3. Создаем любой GUI-проект из семейства WPF-родственничков. Работающая киллер-фича в этой многоплатформенности - парсинг XAML в райнтайме. Пользуемся ей примерно так:
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) { Class1 class1 = new Class1(); DependencyObject importedXaml; using (Stream stream = class1.GetXaml()) { importedXaml = XamlReader.Load(stream) as DependencyObject; stream.Close(); } UserControl control = importedXaml as UserControl; rootGrid.Children.Add(control); }Еще раз напоминаю о проверках.

Итого:
Наша PСL-библиотека выступила как прокси, передающая контрол из песочницы любой платформе WPF-семейства, воспользовавшись своей уникальной способностью в одиночку быть подгруженной любой из них. Ирония в том, что она не в курсе, что это сделала. И при этом у нас остался проект в песочнице с контролом, над которым могут трудиться GUI-дизайнеры.
Да, костыль конечно. Но и польза есть, Portable Library годится для передачи чего угодно (например иконок) как единый источник для всех платформ.

Далее, под каждую платформу уже можно завести Dictionary с описанием стилей для элементов. При необходимости, если дефолт платформы не подошел. 

Видео ниже охватывает все платформы, но порезано и ускорено до 8 минут (оригинальный скринкаст был ~45 минут). Vimeo дал гароздо более четкую картинку на том-же разрешении. Youtube "из корбки" показывает HD, но гораздо хуже качеством.

Прямые ссылки:
Vimeo
Youtube

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 28.02.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Apps for business (corporate)
Microsoft 365 Business Standard (corporate)
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерные книги. Рецензии и отзывы
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100