Avaloniaui: Возможности На Примере Messagebox

Avalonia ui — потрясающий фреймворк, к которому вам захочется возвращаться снова и снова.

Итак, давайте вернемся к этому еще раз и посмотрим на некоторые функции моего окна сообщений.



AvaloniaUI: возможности на примере MessageBox

Кто такая Авалония?

AvaloniaUI: возможности на примере MessageBox

Авалония — это кроссплатформенный фреймворк, позволяющий разрабатывать графические интерфейсы на всех современных платформах.

По своей структуре он невероятно близок к wpf: похожий xaml, похожие привязки.

Есть даже официальный руководство для разработчиков wpf. Авалония примечательна тем, что на каждой из систем использует родные интерфейсы: Win32, MonoMac, X11. Что в обновленной версии?

  1. Поддерживает 13 различных значков сообщений.

  2. Возможность скопировать тело сообщения с помощью комбинации клавиш Cntrl+C.
  3. Настройка размера окна в соответствии с его содержимым.

  4. Упрощенная система стилей, позволяющая желающим легко участвовать в разработке и поддержке новых.

  5. Замена TextBlock на TextBox, теперь текст в окне можно выделить.

  6. Сама архитектура была полностью переработана.



AvaloniaUI: возможности на примере MessageBox

Документацию можно найти по адресу 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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.