Avalonia:第一次会议

当我们遇到新的语言时,我们会写“ Hello world”,当我们遇到新的UI时,我们会创建一个笔记本。 在这里,我想展示与AvaloniaUI Corps平台GUI框架进行友谊的最简单示例。



首先,安装必要的模板。

为此,请将此存储库保存在您的计算机上。

打开控制台并输入:

dotnet new --install [   ] 

并创建一个入门项目:

 dotnet new avalonia.mvvm -o Notebook 

在MainWindow.xaml文件中,像wpf中一样添加简单的标记。

 <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)架构和ARM上都做得很好,但是Raspbian显然失败了。


聚苯乙烯

该项目异常有趣且令人愉快。 它有很多针对性平台,包括苹果平台,我们希望它很快能在所有平台上正常运行。

Source: https://habr.com/ru/post/zh-CN438920/


All Articles