Мы рады представить третью альфа версию 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
(пока только в одну сторону), к стандартным биндингам добавлено несколько расширений:
Биндинг к контролам
Вместо
<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-фид «ночных сборок»: https://www.myget.org/F/perspex-nightly/api/v2/Packages
ссылка на оригинал статьи http://habrahabr.ru/post/272151/
Добавить комментарий