Mit dem Paket Kuonen.UI.App schreibt eine Anwendung nur eine App-Klasse und ihre Seiten. Den Einstieg je Plattform (Main, Activity, AppDelegate)
schreibt der KXAML-Generator beim Bauen, und beim Start wählt Kuonen.UI den passenden Host: Windows, Linux (Wayland oder X11), macOS, Android, iOS
oder den Browser. Auf jeder Plattform werden dieselben Dateien eingebunden.
Einbinden
dotnet new console -n Kasse
cd Kasse
dotnet add package Kuonen.UI.App
Program.cs wird nicht gebraucht und kann gelöscht werden. Kern, Controls, Themes, Hosts und der KXAML-Generator kommen als Abhängigkeiten mit;
die .kxaml-Dateien des Projekts werden automatisch übersetzt.
Die App-Klasse
using Kuonen.UI.App;
using Kuonen.UI.Controls;
namespace Kasse;
public sealed class App : KuonenAnwendung
{
public override Window ErzeugeHauptfenster() =>
new() { Title = "Kasse", Width = 480, Height = 320, Content = new Hauptseite() };
}
Mehr braucht es nicht: dotnet run öffnet das Fenster auf dem Host der Plattform. KuonenAnwendung bietet dazu:
| Mitglied | Zweck |
|---|---|
ErzeugeHauptfenster() | das erste Fenster (muss überschrieben werden) |
BeimStart(IKuonenHost host) | vor dem Hauptfenster, auf dem Thread der Oberfläche, etwa um Dienste anzumelden |
Fehler(Exception ausnahme) | eine unbehandelte Ausnahme der Oberfläche; true, wenn die Anwendung weiterläuft |
BrowserElement | im Browser die id des Elements, in dem die Anwendung läuft (Vorgabe app) |
Zur Laufzeit nennt KuonenApp.Host den gewählten Host (Windows, Linux, MacOS, Browser, Android, IOS oder Headless).
Welcher Host gewählt wird
| Plattform | Host | Start |
|---|---|---|
| Windows | WindowsHost | Main vom Generator |
| Linux | LinuxHost (Wayland, sonst X11) | Main vom Generator |
| macOS | MacHost | Main vom Generator |
| Browser (WebAssembly) | BrowserHost | Main vom Generator, die Seite läuft weiter |
| Android | AndroidHost | Activity vom Generator |
| iOS und iPadOS | IosHost | Main, AppDelegate und Szene vom Generator |
Die Umgebungsvariable KUONEN_UI_HOST=headless startet die Anwendung ohne Fenster (Tests, Server, CI). Andere Werte übergeht sie; es entscheidet die
Erkennung. Unter Linux wählt KUONEN_UI_BACKEND=wayland oder KUONEN_UI_BACKEND=x11 das Fenstersystem.
Nur der nötige Host im Paket
Ohne RuntimeIdentifier enthält die Anwendung alle Desktop-Hosts und wählt beim Start. Mit einer RuntimeIdentifier (win-x64, linux-x64,
osx-arm64, browser-wasm …) schaltet das Paket die Hosts der anderen Plattformen ab; Trimmen und Native AOT entfernen sie samt ihrem Code:
dotnet publish -c Release -r win-x64 -p:PublishAot=true
Android und iOS
Dasselbe Projekt baut auch für die Telefone, wenn die Workloads da sind (dotnet workload install android ios). Dazu die Zielplattformen und die
Angaben der App ergänzen:
<PropertyGroup>
<TargetFrameworks>net10.0;net10.0-android;net10.0-ios</TargetFrameworks>
<SupportedOSPlatformVersion Condition="'$(TargetFramework)' == 'net10.0-android'">26</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="'$(TargetFramework)' == 'net10.0-ios'">15.0</SupportedOSPlatformVersion>
<ApplicationId>org.beispiel.kasse</ApplicationId>
<ApplicationTitle>Kasse</ApplicationTitle>
<ApplicationVersion>1</ApplicationVersion>
<ApplicationDisplayVersion>1.0.0</ApplicationDisplayVersion>
</PropertyGroup>
Für iOS gehört eine Info.plist ins Projekt, deren Szenenkonfiguration den Delegaten SceneDelegate nennt (UIApplicationSceneManifest,
UISceneDelegateClassName); der Generator registriert ihn unter diesem Namen. Ein vollständiges Beispiel liegt unter samples/Kuonen.UI.Beispiel.App.
Den Einstieg selbst schreiben
Wer Main, eine eigene Start-Activity (MainLauncher = true) oder einen eigenen AppDelegate schreibt, bekommt keinen generierten Einstieg. Ganz
abschalten lässt er sich mit:
<PropertyGroup>
<KuonenUIEinstieg>false</KuonenUIEinstieg>
</PropertyGroup>
Der eigene Start ruft dann KuonenApp.Starte(new App()) oder ohne App-Klasse KuonenApp.Starte(() => new Window { … }).
Meldungen des Generators:
| Meldung | Bedeutung |
|---|---|
KX0900 | mehrere App-Klassen: der Einstieg entsteht nur für genau eine |
KX0901 | die App-Klasse braucht einen öffentlichen Konstruktor ohne Parameter |
Im Designer ausprobieren
Im Designer (siehe docs/designer.md) lässt sich oben in der Vorschau die Umgebung umstellen: Windows, Linux (GNOME oder KDE), macOS,
Android, iOS oder Browser. Die Seite erscheint dann mit der Designsprache, der Systemschrift, der sicheren Zone und der Bildschirmtastatur dieser
Umgebung, Telefone in ihrer typischen Grösse. So zeigt sich ohne Gerät, wie sie auf jeder Plattform aussieht und reagiert.