Третья альфа версия Perspex UI Framework с поддержкой iOS/Android

Мы рады представить третью альфа версию Perspex (см. предыдущий анонс).
Perspex — кроссплатформенный UI-фреймворк для .NET с открытым исходным кодом, сделанный по образу и подобию WPF, с XAML, биндингами, шаблонами контролов, собственной системой отрисовки и прочими плюшками.

В этом релизе добавлена первоначальная поддержка платформ iOS и Android.

Список изменений под катом.

iOS/Android

При помощи нашего нового бэкенда на C++ на базе Skia стало возможным использование единого кода рисования для всех платформ (за исключением WinRT, но там должен завестись текущий Direct2D-бэкенд), что позволило достаточно быстро портироваться на мобильные платформы. На текущий момент поддержка только на базовом уровне (см. видео), нет многооконности, попапов, на iOS не работает текстовый ввод, да и жесты преобразуются в события мыши, но мы работаем над этим. Использование нативного бэкенда в дальнейшем позволит делать сборки для Android без использования Xamarin за счёт использования libmono и NativeActivity. С iOS всё несколько сложнее, LGPL-лицензия не позволяет использовать Mono-рантайм, так что придётся ждать возможности запуска на iOS coreclr.

XAML

В прошлой версии XAML-биндинги были малость забагованы, в этой версии над ними проведена большая работа, что позволяет весьма уверенно ими пользоваться. Реализована частичная поддержка MultiBinding (пока только в одну сторону), к стандартным биндингам добавлено несколько расширений:

Биндинг к контролам

Вместо


можно писать



Асинхронные биндинги

Теперь можно биндиться к свойствам, возвращающим Task или IObservable, система биндингов сама всё обработает как надо.

Инверсия значения

Писали когда-нибудь примитивный конвертер, только чтобы обратить булево значение? У нас теперь можно для этого использовать символ ! в пути биндинга.

Шаблоны контролов в XAML

Раньше шаблоны можно было задавать только из кода, теперь даже наша стандартная тема оформления полностью перреведена на XAML.

Мультиселект в листбоксе

Теперь ListBox поддерживает выделение нескольких элементов, причём его можно биндить к модели в обе стороны без колдунств c ItemContainerStyle как в WPF.

Дизайнер

В нашем расширении к Visual Studio реализовано следующее:

  • Увеличение
  • Настройка цвета фона
  • Поддержка автодополнения для attached-свойств и расширений разметки
  • Поддержка clr-namespace, что позволяет получить автодополнение для ваших контролов (только пересобирать не забывайте, метаданные на текущий момент вычитываются только из dll-ок)
  • Поддержка Design.DataContext, Design.Width, Design.Height, так что теперь можно использовать моки моделек и смотреть как это счастье будет выглядеть прямо в дизайнере (пользоваться для этих целей следует расширением разметки Static)

«Прямые» свойства

PerspexProperty, равно как и DependencyProperty в WPF — штука тяжеловесная, так что мы добавили поддержку для превращения обычных свойств в нечто, к чему можно биндиться. Выглядит это примерно так:

public static readonly PerspexProperty IsFocusedProperty =
    PerspexProperty.RegisterDirect("IsFocused", o => o.IsFocused);
public bool IsFocused
{
    get { return _isFocused; }
    set { SetAndRaise(IsFocusedProperty, ref _isFocused, value); }
}


Что даёт поддержку для данного свойства в реализации INotifyPropertyChanged и GetObservable.

Фреймворк стремительно развивается, но это всё ещё альфа, так что в наличии букет багов всех цветов и расцветок, проблемы с производительностью, которой пока никто толком не занимался, местами может подтекать память, вот это всё. При обнаружении чего-то из вышеперечисленного просьба заводить issue на гитхабе. На текущий момент главными поставщиками багрепортов являются авторы редактора диаграмм Core2D и IDE для встраиваемых систем VitalElement Studio, пытающиеся портировать свои приложения с WPF на Perspex.

Автор Core2D добился некоторого прогресса на этом поприще. Думаю, к концу зимы мы уже выкатим бету, которую можно будет считать чем-то готовым к эксплуатации в небольших приложениях.
С вопросами можно обращаться ко мне и в наш уютный чатик на Gitter (в чатике, невзирая на уютность, только английский).

Репозиторий на GitHub
Чат в Gitter (на английском)
Пакеты в Nuget: Perspex, Perspex.Desktop, Perspex.Android, Perspex.iOS
NuGet-фид «ночных сборок»: https://www.myget.org/F/perspex-nightly/api/v2/Packages

© Habrahabr.ru