عندما نلتقي بلغة جديدة ، نكتب "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
المشروع مثير للاهتمام وممتع بجنون. لديها الكثير من المنصات المستهدفة ، بما في ذلك منصات التفاح ، ونأمل أن تعمل قريباً بشكل مثالي على جميع المنصات.