Мы рады представить третью альфа версию 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-фид «ночных сборок»:
www.myget.org/F/perspex-nightly/api/v2/Packages