Мы рады представить третью альфа версию Perspex (см. предыдущий анонс).
Perspex — кроссплатформенный UI-фреймворк для .NET с открытым исходным кодом, сделанный по образу и подобию WPF, с XAML, биндингами, шаблонами контролов, собственной системой отрисовки и прочими плюшками.
В этом релизе добавлена первоначальная поддержка платформ iOS и Android, улучшены дизайнер и XAML, исправлено множество ошибок.
Список изменений под катом.
Что даёт поддержку для данного свойства в реализации
Фреймворк стремительно развивается, но это всё ещё альфа, так что в наличии букет багов всех цветов и расцветок, проблемы с производительностью, которой пока никто толком не занимался, местами может подтекать память, вот это всё. При обнаружении чего-то из вышеперечисленного просьба заводить issue на гитхабе. На текущий момент главными поставщиками багрепортов являются авторы редактора диаграмм Core2D и IDE для встраиваемых систем VitalElement Studio, пытающиеся портировать свои приложения с WPF на Perspex.
Автор Core2D добился некоторого прогресса на этом поприще. Думаю, к концу зимы мы уже выкатим бету, которую можно будет считать чем-то готовым к эксплуатации в небольших приложениях.
С вопросами можно обращаться ко мне и в наш уютный чатик на Gitter (в чатике, невзирая на уютность, только английский).
Репозиторий на GitHub
Чат в Gitter (на английском)
Пакеты в Nuget:
NuGet-фид «ночных сборок»:
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-фид «ночных сборок»:
https://www.myget.org/F/perspex-nightly/api/v2/Packages
Комментарии (9)
Bonart
05.12.2015 16:21А как насчет поддержки настраиваемых соглашений а-ля Caliburn Micro?
kekekeks
05.12.2015 17:41Есть мнение, что проще не заморачиваться, а сам калибурн портировать. Он в любом случае будет нужен, без нормального MVVM-фреймворка тяжко.
kekekeks
05.12.2015 17:47Вот, тут персонаж один Prism портирует. Не вижу причин не портировать калибурн.
CRivlaldo
05.12.2015 20:45А что с iOS в данный момент? Используется Xamarin? У coreclr я не вижу iOS в списке доступных платформ.
kekekeks
05.12.2015 23:24Для мобилок сейчас Xamarin. Android в перспективе можем завести без платных библиотек (через ту же libmono самосборную), с iOS кроме Mono работать ничего не умеет, а Mono-овский runtime под лицензией LGPL, что делает нелегальной его статическую линковку без разрешения правообладателя.
IL_Agent
Очень рад, что XAML живёт и развивается благодаря проектам вроде вашего! Не планируете поддержку web (html5 или может webgl), как замену Сильверлайту?
Насчёт биндингов. Раз уж вы решили сокращать их запись, может вообще избавиться от слова «Binding»? Это как идея :)
kekekeks
Идея хорошая, подумаем над синтаксисом. Можно как в полимере сделать
{{My.Property.Path}}
.IL_Agent
А почему одинарные скобки нельзя оставить? Потому что конфликтовать с MarkupExtensions будет? А оно поддерживается, кстати?
kekekeks
Да, будет конфликтовать. Поддерживаемые из коробки расширения разметки здесь.