Frau Aydin arbeitet den ganzen Tag im Windows-Programm. Die Blazor-Seite aus Lektion M4.3 liegt im Browser, in einem anderen Fenster, mit einer anderen Anmeldung und einem Lesezeichen,
das sie sich merken müsste. Für den Übergang gibt es einen Weg, der ihr das erspart: dieselbe Seite im Windows-Programm. Microsoft nennt das Blazor Hybrid und beschreibt, dass
Razor-Komponenten dabei nativ im Windows-Prozess laufen und in ein eingebettetes Web-View-Steuerelement zeichnen: nicht im Browser, und ohne WebAssembly. Für Windows Forms und WPF liefert Blazor je ein
Steuerelement BlazorWebView. Microsofts Dokumentation sagt, wozu das gedacht ist: neue Oberfläche in vorhandene Desktop-Programme zu bringen, die sich im Web und mit .NET MAUI
wiederverwenden lässt. Genau das tun wir.
Die Brücke ist ein Übergang, wie die Schutzschicht und der Schalter: Sie lässt das alte Programm als Hülle stehen, während die Seiten schon die neuen sind. Wenn das alte Programm abgeschaltet wird (Lektion M6.5), zieht die Brücke ab, und die Seiten laufen allein im Browser. Das ist der Grund, warum die Komponenten in einer Klassenbibliothek liegen und das Fenster nichts von ihnen weiß als ihren Namen.
Was man braucht
Microsofts Anleitung für Windows Forms nennt die Schritte, und sie sind kurz:
| Schritt | Was |
|---|---|
| 1 | Das Projekt benutzt das SDK Microsoft.NET.Sdk.Razor statt Microsoft.NET.Sdk (erste Zeile der Projektdatei) |
| 2 | Das NuGet-Paket Microsoft.AspNetCore.Components.WebView.WindowsForms |
| 3 | _Imports.razor im Wurzelordner mit @using Microsoft.AspNetCore.Components.Web |
| 4 | Ein Ordner wwwroot mit index.html: Es enthält ein Element <div id="app"> und das Skript _framework/blazor.webview.js |
| 5 | Im Fenster ein BlazorWebView, mit HostPage auf die Datei, Services mit den Diensten und RootComponents.Add<T>("#app") |
| 6 | Die Dienste enthalten AddWindowsFormsBlazorWebView() |
Die Anleitung nennt außerdem, was man nicht tun soll: In der Werkzeugkiste des Designers liegt neben BlazorWebView auch ein reines WebView2; wer das falsche zieht, hat ein Steuerelement ohne Blazor. Wir umgehen den Designer: Die Formulare des Auftragsbuchs
entstehen ohnehin im Code (Lektion M1.2).