Avalonia erstes Treffen

  • Tutorial
Wenn wir eine neue Sprache treffen, schreiben wir „Hallo Welt“, und wenn wir eine neue Benutzeroberfläche treffen, erstellen wir ein Notizbuch. Hier möchte ich mit dem Rahmen ein einfaches Beispiel der Freundschaft zeigen korssplatformennym die GUI AvaloniaUI .



Installieren Sie zuerst die erforderliche Vorlage.

Speichern Sie dazu dieses Repository auf Ihrem Computer.

Öffne die Konsole und schreibe:

dotnet new --install [путь до скачанного шаблона]

Und erstellen Sie ein Startprojekt:

dotnet new avalonia.mvvm -o Notebook

Fügen Sie eine einfache Markierung wie in "wpf" in der Datei "MainWindow.xaml" hinzu.

<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>

C mvvm ist hier alles ein wenig anders, da ReactiveUI standardmäßig verwendet wird.

So fügen wir in der Datei MainWindowViewModel.cs Folgendes hinzu:

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


Im Gegensatz zum Standard-Wpf erlaubt Avalonia dem Team jedoch, Befehle direkt an die Methoden zu binden.
Es ist auch erwähnenswert, dass die Dateidialoge in diesem Framework nur asynchron sind.
Das Öffnen des Dokuments sieht dann so aus:
 public async Task Open()
        {
            var dialog = new OpenFileDialog();
            string[] result = null;
            dialog.Filters.Add(new FileDialogFilter() {Name = "Text", Extensions = {"txt"}});
            result = await dialog.ShowAsync();
            if (result != null)
            {
                Data = File.ReadAllText(result.First());
            }
        }

Und hier ist die Erhaltung:

 public async Task Save()
        {
            var dialog = new SaveFileDialog();
            dialog.Filters.Add(new FileDialogFilter() 
            {Name = "Text", Extensions = {"txt"}});
            var result = await dialog.ShowAsync(new MainWindow());
            if (result != null)
            {
                File.WriteAllText(result, Data);
            }
        }

Damit die Anwendung unter Linux ausgeführt werden kann, müssen Sie eine weitere Abhängigkeit hinzufügen: Avalonia.Skia.Linux.Natives.

Leider werden nicht alle Baugruppen unser Fenster anzeigen können. Ubuntu (einschließlich Mate) leistet sowohl auf der großen (x64) -Architektur als auch auf dem Arm hervorragende Arbeit, aber Raspbian versagt offensichtlich.


PS

Das Projekt ist unglaublich interessant und erfreulich. Es gibt viele gezielte Plattformen, darunter auch Apple-Plattformen. Wir hoffen, dass es bald auf allen Plattformen funktionieren wird.

Jetzt auch beliebt: