Ketika kami bertemu bahasa baru, kami menulis "Halo dunia", dan ketika kami bertemu UI baru, kami membuat buku catatan. Di sini saya ingin menunjukkan contoh paling sederhana dari persahabatan dengan platform Kerangka GUI AvaloniaUI Corps.
Pertama-tama, instal templat yang diperlukan.
Untuk melakukan ini, simpan repositori
ini di mesin Anda.
Buka konsol dan tulis:
dotnet new --install [ ]
Dan buat proyek pemula:
dotnet new avalonia.mvvm -o Notebook
Tambahkan markup sederhana seperti pada wpf di file 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>
Dengan mvvm, semuanya sedikit berbeda di sini, karena ReactiveUI digunakan secara default.
Jadi dalam file MainWindowViewModel.cs, tambahkan:
private string _data; public string Data { get => _data; set => this.RaiseAndSetIfChanged(ref _data, value); }
Tetapi tidak seperti wpf default, Avalonia memungkinkan Anda untuk mengikat perintah langsung ke metode.
Dan perlu juga dicatat bahwa dialog file dalam kerangka ini hanya asinkron.
Maka membuka dokumen akan terlihat seperti ini:
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()); } }
Dan inilah 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); } }
Agar aplikasi dapat berjalan di Linux, Anda harus menambahkan satu lagi ketergantungan: Avalonia.Skia.Linux.Natives.
Namun sayangnya tidak semua majelis akan dapat menampilkan jendela kita. Ubuntu (termasuk Mate) melakukan pekerjaan yang baik pada arsitektur besar (x64) dan lengan, tetapi Raspbian jelas gagal.
PS
Proyek ini sangat menarik dan menyenangkan. Ini memiliki banyak platform yang ditargetkan, termasuk yang apel, kami berharap bahwa segera akan berfungsi dengan baik di semua platform.