(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

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


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Microsoft »
Обсудить материал в конференции Дизайн, графика, обработка изображений »
Написать редактору 
 Рекомендовать » Дата публикации: 28.02.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft Windows Professional 10, Электронный ключ
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерный дизайн - Все графические редакторы
Adobe Photoshop: алхимия дизайна
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Написание программ для микроконтроллеров AVR, PIC, ARM, STM32 (28)
Напишу любую программу на любом искусственном языке. Профессиональный программист. Основная...
 
Отличается ли ДрифтКазино от беттинга? (23)
Друзья, давно заметил, что на Дрифте уже несколько месяцев во всю рекламируется и предлагается...
 
Особенности покупки программного обеспечения - легальный софт vs. кряки/crack, keygen и пр. (4)
А Linux не пробовали? Там ЛЮБОГО добра хватает :) Без всяких кряков, кейгенов и т.д. При этом...
 
Создавая свой веб-сайт, не превращайте его в призрака (3)
Если автор имел что сказать, то почему он этого не сказал. Если не имел, то с какой целью он...
 
Игровые автоматы на настоящие деньги (3)
Только играя в интернет-заведении с лицензией...
 
 
 



    
rambler's top100 Rambler's Top100