Текущий статус проекта — вторая альфа. То есть, щупать уже можно, но в продакшн тащить всё же рановато. В наличии солидный набор работающих контролов: Button, ToggleButton, CheckBox, HtmlLabel, RadioButton, Canvas, ContentControl, Control, Controls, Deck, Decorator, DropDown, Image, ItemsControl, ListBox, ListBoxItem, Menu, MenuItem, Panel, StackPanel, Grid, Primitives.Popup, Primitives.SelectingItemsControl, Primitives.TabStrip, Primitives.TemplatedControl, Primitives.Thumb, Primitives.Track, ScrollViewer, TabControl, TabItem, TextBlock, TextBox, ToolTip, TreeView. DockPanel в закрывающееся окно релиза второй альфы не пролез, доступен в ночных сборках. Нативный вид для них будет сделан примерно так же как и в WPF — созданием дефолтных тем для распространённых платформ. Заниматься фигнёй с написанием кусков платформозависимого UI-кода, как необходимо делать в случае с Xamarin.Forms при использовании Perspex не придётся.
Система типов и API рисования достаточно схожи с WPF, например, мне без особых проблем удалось портировать HtmlLabel из HtmlRenderer.
Система стилей по сравнению с WPF несколько расширена. У контрола может быть несколько стилей с разными селекторами, например :pointerover, что позволяет делать стилизацию наподобие CSS.
Intellisense в дизайнере пока позволяет автодополнять имена и свойства встроенных в Perspex сущностей, но текущая система его реализации в дальнейшем позволит как подключение через clr-namespace, так и простейшее дополнение для биндингов. Для чего-то более сложного нужно строить полноценное AST, а это достаточно большой объём работ.
Попробовать в действии проще всего установив расширение для Visual Studio и создав проект из прилагаемого шаблона.
Репозиторий на GitHub
Уютный чатик в Gitter (на английском)
NuGet-пакет
NuGet-фид «ночных сборок»:
https://www.myget.org/F/perspex-nightly/api/v2/Packages
Комментарии (14)
VioletGiraffe
22.09.2015 15:31Только .NET? C C++ не подружится?
kekekeks
22.09.2015 15:40Для С++ вроде Qt с его QML вполне неплохо работает. А инфраструктуры для биндингов в стиле WPF у плюсов малость не хватает.
VioletGiraffe
22.09.2015 15:44+1QML — гадость (лично на мой взгляд). К Qt cо временем всё больше и больше претензий копится. Начиная с того, что как-то только хочешь сделать что-то не совсем стандартное — это либо очень проблематично, либо невозможно, и заканчивая тем, что серьёзный баг за 10 месяцев так и не починили, из-за чего я до сих пор не могу перейти с древнего Qt 4 на современный Qt 5.
sdvn
29.09.2015 10:44Интересный проект, а .NET CF не тянет? Что-то я нигде не увидел упоминания.
kekekeks
29.09.2015 11:33+1Сборка производится в PCL с Profile7. Из коробки это на CF не завести. При большом желании можно попробовать скомпилировать, доложив исходники недостающих классов из Mono. Бэкэнд оконной подсистемы использует только win32, так что там замена всего на cordll в DllImport может помочь. Остаётся открытым вопрос о движке отрисовки — Direct2D и Cairo на WinCE не доступны, нужно писать отдельный.
northicewind
Очень интересно, спасибо. Особенно круто, что планируется поддержка мобильных платформ. А есть какой-то getting started для Mac OS X?
kekekeks
Ставите пакет из NuGet-а и пытаетесь пользоваться. Поддержки intellisense и дизайнера для Xamarin Studio пока нет.
kekekeks
github.com/Perspex/Perspex/tree/master/samples/TestApplication — кроссплатформенный пример кода без XAML.
northicewind
Да, спасибо. Я его и скачал. И про intellisense понял :) Буду смотреть и следить за проектом. Удачи.
Nagg
Эм… а что за языковые конструкции типа этой: github.com/Perspex/Perspex/blob/master/samples/TestApplication/GalleryStyle.cs#L115?
ЗЫ: проект интересный, подожду когда запилите под мобилки :-)
kekekeks
Indexer initializer + перегрузка операторов "!" и "~". "!" для биндинга, "~" для биндинга с приоритетом TemplatedParent. Подробнее тут. Надо вообще заняться перетаскиванием этого дела из бложика grokys в вики.
lam0x86
А как быть с конвертерами при такой записи? И есть ли в планах задача по переходу от XAML на что-то более читаемое? Эдакий Razor для WPF? Ну, или хотя бы поддержка простейших операций типа сложения и тернарного оператора в биндингах? Это, по-моему, один из главных косяков WPF-а. (У меня пока не было времени детально ознакомиться с проектом. Если что-то уже реализовано, замечательно!)
kekekeks
Буквально сегодня дискутировали на тему того, как внедрить в разметку выражения не превратить при этом её в спагетти.