Avalonia ui — потрясающий фреймворк, к которому вам захочется возвращаться снова и снова.
Итак, давайте вернемся к этому еще раз и посмотрим на некоторые функции моего окна сообщений.
Кто такая Авалония?
Авалония — это кроссплатформенный фреймворк, позволяющий разрабатывать графические интерфейсы на всех современных платформах.
По своей структуре он невероятно близок к wpf: похожий xaml, похожие привязки.
Есть даже официальный руководство для разработчиков wpf. Авалония примечательна тем, что на каждой из систем использует родные интерфейсы: Win32, MonoMac, X11. Что в обновленной версии?
- Поддерживает 13 различных значков сообщений.
- Возможность скопировать тело сообщения с помощью комбинации клавиш Cntrl+C.
- Настройка размера окна в соответствии с его содержимым.
- Упрощенная система стилей, позволяющая желающим легко участвовать в разработке и поддержке новых.
- Замена TextBlock на TextBox, теперь текст в окне можно выделить.
- Сама архитектура была полностью переработана.
Документацию можно найти по адресу gitlab .
Сам пакет можно скачать с сайта Нугет .
Поговорим об особенностях и фишках авалонии.
Очевидно, что если и будут сравнения, то это будет сравнение с wpf. Первое, что бросается в глаза после фреймворков от ms, — это возможность привязывать команды к методам.
Да, функционально это дает меньше возможностей, но взамен упрощает подход к разработке модели представления.
<Button Command="{Binding RunTheThing}" CommandParameter="Hello World"> Do the thing! </Button>
public void RunTheThing(string parameter)
{
// Code for executing the command here.
}
Avalonia также построена с использованием реактивных расширений, что позволяет работать с событиями платформы как с первоклассными объектами, используя декларативный синтаксис запросов LINQ, что позволяет писать краткий и читаемый код. Но если копнуть немного глубже, все становится не так радужно и очевидно, да и документация еще не доработана (но вы можете помочь).
Привязка к изображению
Проблема, с которой я столкнулся почти сразу при обновлении проекта, заключалась в том, как отображать изображения в моем окне.Для начала вам необходимо зарегистрировать каталог с изображениями как ресурс avalonia, ведь важно, чтобы значки отображались любому пользователю и были удобно упакованы вместе со всем кодом.
<ItemGroup>
.
<AvaloniaResource Include="Assets\*" />
</ItemGroup>
Теперь вы можете легко установить выбранное изображение в тег изображения.
<Image Source="/Assets/error.ico" />
Но при использовании vm Source изображения нельзя просто привязать к строке, необходимо использовать Bitmap. <Image Source="{Binding ImagePath}" />
public Bitmap ImagePath { get; private set; }
И соответственно, теперь нам нужно извлечь из ресурсов наше изображение.
Зачем использовать локатор Avalonia. ImagePath = new Bitmap(AvaloniaLocator.Current.GetService<IAssetLoader>()
.
Open(new Uri($" avares://ASSEMBLYNAME/relative/project/path/{ImageName}.
ico ")));
Стоит отметить, что для встроенных ресурсов префикс используется при компиляции uri резм:// , а для авалонии - аварес:// .
Рисунок
Цифры в avalonia и wpf схожи, но публичные свойства разные.Поэтому, скачав svg-изображения и сконвертировав их в ms xaml с помощью inskape, сразу их использовать не удалось.
Бесплатная фигура <PathGeometry
Figures="M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297"
FillRule="NonZero"/>
Превращается в: <GeometryDrawing
Brush="#FF50C8EF"
Geometry="M30 53 C15.641 53 4 41.359 4 27S15.641 1 30 1s26 11.641 26 26c0 7.135-2.874 13.599-7.528 18.297" />
Строка: <Line X1="25" Y1="37"
X2="25" Y2="39" StrokeThickness="2"
Stroke="#FFFFFFFF"
StrokeMiterLimit="10"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"/>
Превращается в: <Line
StartPoint="25,37"
EndPoint="25,39"
StrokeThickness="2"
Stroke="#FFFFFFFF"
StrokeStartLineCap="Round"
StrokeEndLineCap="Round"/>
Стили
О самих стилях было сказано достаточно.Стоит только отметить, что это привычные стили с небольшой примесью css. Я хотел показать, как применить стиль из отдельного файла.
Во-первых, все файлы xaml должны быть ресурсами Avalonia. <ItemGroup>
<AvaloniaResource Include="**\*.
xaml"> <SubType>Designer</SubType> </AvaloniaResource> .
</ItemGroup>
Во-вторых, стили применяются так же, как и ресурсы изображений, с использованием uri и локатора.
YourControl.Styles.Add(new StyleInclude(new Uri(" avares://ASSEMBLYNAME/relative/project/path.xaml ")){Source = new Uri(" avares://ASSEMBLYNAME/relative/project/path.xaml ")});
Приятные мелочи
TextBox имеет свойство Watermark. Это позволяет не искать сторонние пакеты и не строить TextBlock поверх TextBox, о чем можно прочитать во многих туториалах по wpf. <TextBox Watermark="Street address" />
Кроме того, все привязки по умолчанию используют PropertyChanged для запуска обновления связанного свойства.
Окончательно
Предлагаю всем попробовать этот интересный фреймворк.Выражаю благодарность пользователям Артём Горчаков И Никита Цуканов .
И напомню, что у авалонии уютная и восхитительная поддержка в Гиттер .
Теги: #Разработка для Linux #Разработка для Windows #программирование #C++ #.
NET #.
net core #GUI #avalonia #avalononiaui #messagebox
-
Как Зарабатывать Деньги В Интернете
19 Oct, 24 -
От Тестирования К Обеспечению Качества
19 Oct, 24 -
До Gopro: Эволюция Экшн-Камер
19 Oct, 24 -
Настройка Vtl Для Centos 7
19 Oct, 24 -
И Еще Раз О Мотивации
19 Oct, 24 -
Бэкэнд Юнайтед #1. Винегрет. Объявление
19 Oct, 24 -
Краткое Введение В Создание Компилятора
19 Oct, 24