WebView
Der Browser des Systems in der Oberfläche (macOS: WKWebView): Adresse, Zurück und Vor, HTML aus einer Zeichenkette, Skripte und Nachrichten. Erlaubt sind http, https, about und data; Navigating kann abbrechen. Wo der Host keinen Browser einbetten kann, steht ein Platzhalter.


KXAML
WebViewSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
xmlns:x="https://ui.kuonen.org/kxaml/x"
x:Class="Kuonen.UI.Galerie.Seiten.WebViewVorfuehrung"
Spacing="8">
<!-- Adresszeile und Knöpfe füllt WebViewSeite.Fuelle, dieselbe Methode wie die C#-Fassung. -->
<StackPanel x:Name="Leiste" Orientation="Horizontal" Spacing="6" />
<WebView x:Name="Web" Width="640" Height="360" />
<TextBlock x:Name="Status" />
</StackPanel>WebViewSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
namespace Kuonen.UI.Galerie.Seiten;
public sealed partial class WebViewSeite
{
protected override Func<UIElement>? KxamlFabrik => () => new WebViewVorfuehrung();
}
/// <summary>KXAML-Fassung der Seite WebView: das Gerüst steht in WebViewSeite.kxaml, das Innere füllt WebViewSeite.Fuelle.</summary>
public sealed partial class WebViewVorfuehrung
{
public WebViewVorfuehrung()
{
InitializeComponent();
// Die Adresszeile steht in der Leiste (wie in der C#-Fassung), darum hier gebaut.
WebViewSeite.Fuelle(Leiste, new TextBox { Width = 360, Text = "https://ui.kuonen.org" }, Web, Status);
}
}C#
WebViewSeite.cs
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;
namespace Kuonen.UI.Galerie.Seiten;
/// <summary>Galerie-Seite: WebView mit Adresszeile, Verlauf und HTML aus einer Zeichenkette (Plan 6j).</summary>
public sealed partial class WebViewSeite : GalerieSeite
{
public override string Titel => "WebView";
public override string Beschreibung =>
"Der Browser des Systems in der Oberfläche (macOS: WKWebView): Adresse, Zurück und Vor, HTML aus einer Zeichenkette, Skripte und Nachrichten. " +
"Erlaubt sind http, https, about und data; Navigating kann abbrechen. Wo der Host keinen Browser einbetten kann, steht ein Platzhalter.";
public override string Stichworte => "WebView WebView2 WebBrowser Browser HTML Navigation Skript Nachricht WKWebView";
public override string Datei => nameof(WebViewSeite);
public override UIElement Baue()
{
var seite = new StackPanel { Spacing = 8 };
var leiste = new StackPanel { Orientation = Orientation.Horizontal, Spacing = 6 };
var adresse = new TextBox { Width = 360, Text = "https://ui.kuonen.org" };
var web = new WebView { Width = 640, Height = 360 };
var status = new TextBlock();
Fuelle(leiste, adresse, web, status);
seite.Children.Add(leiste);
seite.Children.Add(web);
seite.Children.Add(status);
return seite;
}
/// <summary>Adresszeile und Knöpfe (auch von der KXAML-Fassung benutzt).</summary>
public static void Fuelle(StackPanel leiste, TextBox adresse, WebView web, TextBlock status)
{
void Knopf(string text, Action tun)
{
var k = new Button { Content = text };
k.Click += (_, _) => tun();
leiste.Children.Add(k);
}
Knopf("◀", web.GoBack);
Knopf("▶", web.GoForward);
leiste.Children.Add(adresse);
Knopf("Öffnen", () =>
{
if (Uri.TryCreate(adresse.Text, UriKind.Absolute, out var ziel)) web.Source = ziel;
});
Knopf("HTML", () => web.NavigateToString("<html><head><title>Hallo</title></head><body><h1>Hallo aus Kuonen.UI</h1><p>Diese Seite kommt aus einer Zeichenkette.</p></body></html>"));
web.NavigationCompleted += (_, e) =>
{
status.Text = (e.IsSuccess ? "Geladen: " : "Nicht geladen: ") + e.Uri;
if (e.Uri is { } u && u.Scheme != "about") adresse.Text = u.ToString();
};
}
}