Avalonia: première rencontre

Lorsque nous rencontrons une nouvelle langue, nous écrivons «Bonjour tout le monde», et lorsque nous rencontrons une nouvelle interface utilisateur, nous créons un cahier. Ici, je veux montrer l'exemple le plus simple d'amitié avec le cadre GUI de la plateforme AvaloniaUI Corps.



Tout d'abord, installez le modèle nécessaire.

Pour ce faire, enregistrez ce référentiel sur votre machine.

Ouvrez la console et écrivez:

dotnet new --install [   ] 

Et créez un projet de démarrage:

 dotnet new avalonia.mvvm -o Notebook 

Ajoutez un balisage simple comme dans wpf dans le fichier 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> 

Avec mvvm, tout est un peu différent ici, puisque ReactiveUI est utilisé par défaut.

Donc, dans le fichier MainWindowViewModel.cs, ajoutez:

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


Mais contrairement au wpf par défaut, Avalonia vous permet de lier des commandes directement aux méthodes.
Et il convient également de noter que les boîtes de dialogue de fichiers dans ce cadre sont uniquement asynchrones.
Ensuite, l'ouverture du document ressemblera à ceci:
  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()); } } 

Et voici la sauvegarde:

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

Pour que l'application s'exécute sur Linux, vous devrez ajouter une dépendance supplémentaire: Avalonia.Skia.Linux.Natives.

Mais malheureusement, tous les assemblages ne pourront pas afficher notre fenêtre. Ubuntu (y compris Mate) fait un excellent travail à la fois sur la grande architecture (x64) et sur l'armement, mais Raspbian échoue clairement.


PS

Le projet est incroyablement intéressant et agréable. Il a beaucoup de plates-formes ciblées, y compris celles d'Apple, nous espérons que bientôt cela fonctionnera parfaitement sur toutes les plates-formes.

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


All Articles