أفالونيا: الاجتماع الأول

عندما نلتقي بلغة جديدة ، نكتب "Hello world" ، وعندما نقابل واجهة مستخدم جديدة ، نقوم بإنشاء دفتر ملاحظات. أود هنا أن أبدي أبسط مثال على الصداقة مع نظام واجهة المستخدم الرسومية AvaloniaUI Corps الأساسي.



بادئ ذي بدء ، قم بتثبيت القالب الضروري.

للقيام بذلك ، احفظ هذا المستودع على جهازك.

افتح وحدة التحكم واكتب:

dotnet new --install [   ] 

وإنشاء مشروع بداية:

 dotnet new avalonia.mvvm -o Notebook 

أضف علامة بسيطة كما في wpf في ملف MainWindow.xaml.

 <Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="clr-namespace:Notebook.ViewModels;assembly=Notebook" Icon="resm:Notebook.Assets.avalonia-logo.ico" Title="Notebook"> <!--  --> <Window.KeyBindings> <KeyBinding Gesture="Ctrl+O" Command="{Binding Open}" /> <KeyBinding Gesture="Ctrl+S" Command="{Binding Save}" /> </Window.KeyBindings> <Design.DataContext> <vm:MainWindowViewModel /> </Design.DataContext> <!--  --> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <!----> <Menu Grid.Row="0" Grid.Column="0"> <MenuItem Header="File"> <MenuItem Header="Open" Command="{Binding Open}" /> <MenuItem Header="Save As" Command="{Binding Save}" /> </MenuItem> </Menu> <!--  --> <TextBox Grid.Row="1" Grid.Column="0" Text="{Binding Data}" AcceptsReturn="True" /> </Grid> </Window> 

مع mvvm ، كل شيء مختلف قليلاً هنا ، لأن ReactiveUI يُستخدم افتراضيًا.

في ملف MainWindowViewModel.cs ، أضف:

  private string _data; public string Data { get => _data; set => this.RaiseAndSetIfChanged(ref _data, value); } 


ولكن على عكس wpf الافتراضي ، يسمح لك Avalonia بربط الأوامر بالطرق مباشرةً.
وتجدر الإشارة أيضًا إلى أن مربعات حوار الملفات في هذا الإطار غير متزامنة فقط.
ثم فتح المستند سيبدو كما يلي:
  public async Task Open() { var dialog = new OpenFileDialog(); string[] result = null; dialog.Filters.Add(new FileDialogFilter() {Name = "Text", Extensions = {"txt"}}); result = await dialog.ShowAsync(new Window()); if (result != null) { Data = File.ReadAllText(result.First()); } } 

وهنا الحفظ:

  public async Task Save() { var dialog = new SaveFileDialog(); dialog.Filters.Add(new FileDialogFilter() {Name = "Text", Extensions = {"txt"}}); var result = await dialog.ShowAsync(new Window()); if (result != null) { File.WriteAllText(result, Data); } } 

لكي يعمل التطبيق على نظام Linux ، يجب عليك إضافة تبعية واحدة أخرى: Avalonia.Skia.Linux.Natives.

لكن لسوء الحظ ، لن تتمكن كل المجموعات من عرض نافذتنا. يقوم Ubuntu (بما في ذلك Mate) بعمل رائع في كل من العمارة والذراع الكبيرة (x64) ، لكن Raspbian فشل بشكل واضح.


PS

المشروع مثير للاهتمام وممتع بجنون. لديها الكثير من المنصات المستهدفة ، بما في ذلك منصات التفاح ، ونأمل أن تعمل قريباً بشكل مثالي على جميع المنصات.

Source: https://habr.com/ru/post/ar438920/


All Articles