Cuando conocemos un nuevo idioma, escribimos "Hola mundo", y cuando conocemos una nueva interfaz de usuario, creamos un cuaderno. Aquí quiero mostrar el ejemplo más simple de amistad con el marco GUI de la plataforma AvaloniaUI Corps.
En primer lugar, instale la plantilla necesaria.
Para hacer esto, guarde
este repositorio en su máquina.
Abre la consola y escribe:
dotnet new --install [ ]
Y crea un proyecto inicial:
dotnet new avalonia.mvvm -o Notebook
Agregue marcado simple como en wpf en el archivo 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>
Con mvvm, todo es un poco diferente aquí, ya que ReactiveUI se usa por defecto.
Entonces, en el archivo MainWindowViewModel.cs, agregue:
private string _data; public string Data { get => _data; set => this.RaiseAndSetIfChanged(ref _data, value); }
Pero a diferencia del wpf predeterminado, Avalonia le permite vincular comandos directamente a los métodos.
Y también vale la pena señalar que los cuadros de diálogo de archivo en este marco son solo asíncronos.
Luego, abrir el documento se verá así:
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()); } }
Y aquí está el guardar:
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 la aplicación se ejecute en Linux, deberá agregar una dependencia más: Avalonia.Skia.Linux.Natives.
Pero desafortunadamente no todos los ensamblajes podrán mostrar nuestra ventana. Ubuntu (incluido Mate) hace un gran trabajo tanto en arquitectura grande (x64) como en brazo, pero Raspbian claramente falla.
PS
El proyecto es increíblemente interesante y agradable. Tiene muchas plataformas específicas, incluidas las de Apple, esperamos que pronto funcione perfectamente en todas las plataformas.