Pull to refresh

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

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

В этом релизе добавлена первоначальная поддержка платформ iOS и Android, улучшены дизайнер и XAML, исправлено множество ошибок.



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


iOS/Android

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

XAML

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

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

Вместо
<TextBox Text="{Binding ElementName=other, Path=Text}>"
можно писать
<TextBox Text={Binding #other.Text}>

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

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

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

Писали когда-нибудь примитивный конвертер, только чтобы обратить булево значение? У нас теперь можно для этого использовать символ ! в пути биндинга.
<Button IsEnabled="{Binding !IsBusy}">


Шаблоны контролов в 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<bool> IsFocusedProperty =
    PerspexProperty.RegisterDirect<InputElement, bool>("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-фид «ночных сборок»: www.myget.org/F/perspex-nightly/api/v2/Packages
Tags:
Hubs:
+24
Comments 9
Comments Comments 9

Articles