Avalonia: erstes Treffen

Wenn wir eine neue Sprache kennenlernen, schreiben wir „Hallo Welt“ und wenn wir eine neue Benutzeroberfläche kennenlernen, erstellen wir ein Notizbuch. Hier möchte ich das einfachste Beispiel für eine Freundschaft mit dem GUI Framework der AvaloniaUI Corps-Plattform zeigen.



Installieren Sie zunächst die erforderliche Vorlage.

Speichern Sie dazu dieses Repository auf Ihrem Computer.

Öffnen Sie die Konsole und schreiben Sie:

dotnet new --install [   ] 

Und erstellen Sie ein Starterprojekt:

 dotnet new avalonia.mvvm -o Notebook 

Fügen Sie ein einfaches Markup wie in wpf in der Datei MainWindow.xaml hinzu.

 <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> 

Bei mvvm ist hier alles etwas anders, da ReactiveUI standardmäßig verwendet wird.

Fügen Sie in der Datei MainWindowViewModel.cs Folgendes hinzu:

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


Im Gegensatz zum Standard-wpf können Sie mit Avalonia Befehle direkt an die Methoden binden.
Beachten Sie auch, dass die Dateidialoge in diesem Framework nur asynchron sind.
Das Öffnen des Dokuments sieht dann folgendermaßen aus:
  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()); } } 

Und hier ist die Rettung:

  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); } } 

Damit die Anwendung unter Linux ausgeführt werden kann, müssen Sie eine weitere Abhängigkeit hinzufügen: Avalonia.Skia.Linux.Natives.

Leider können nicht alle Baugruppen unser Fenster anzeigen. Ubuntu (einschließlich Mate) leistet sowohl bei der großen (x64) Architektur als auch beim Arm hervorragende Arbeit, aber Raspbian scheitert eindeutig.


PS

Das Projekt ist wahnsinnig interessant und macht Spaß. Es hat viele gezielte Plattformen, einschließlich Apple-Plattformen. Wir hoffen, dass es bald auf allen Plattformen perfekt funktioniert.

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


All Articles