Avalonia: primeiro encontro

Quando encontramos um novo idioma, escrevemos "Olá, mundo" e, quando encontramos uma nova interface do usuário, criamos um caderno. Aqui, quero mostrar o exemplo mais simples de amizade com a GUI Framework da plataforma AvaloniaUI Corps.



Primeiro de tudo, instale o modelo necessário.

Para fazer isso, salve este repositório em sua máquina.

Abra o console e escreva:

dotnet new --install [   ] 

E crie um projeto inicial:

 dotnet new avalonia.mvvm -o Notebook 

Adicione marcação simples como no wpf no arquivo 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> 

Com o mvvm, tudo é um pouco diferente aqui, pois o ReactiveUI é usado por padrão.

Portanto, no arquivo MainWindowViewModel.cs, adicione:

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


Mas, diferentemente do wpf padrão, o Avalonia permite vincular comandos diretamente aos métodos.
E também é importante notar que as caixas de diálogo de arquivo nesta estrutura são apenas assíncronas.
Em seguida, abrir o documento ficará assim:
  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()); } } 

E aqui está o save:

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

Para que o aplicativo seja executado no Linux, você precisará adicionar mais uma dependência: Avalonia.Skia.Linux.Natives.

Infelizmente, porém, nem todas as montagens poderão exibir nossa janela. O Ubuntu (incluindo o Mate) faz um ótimo trabalho na arquitetura e no braço grande (x64), mas o Raspbian está claramente falhando.


PS

O projeto é incrivelmente interessante e agradável. Tem muitas plataformas direcionadas, incluindo as da Apple, esperamos que em breve funcione perfeitamente em todas as plataformas.

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


All Articles