Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
| built-in WebView2 control | package-backed web control or native host wrapper |
| CoreWebView2 permission hooks | wrapper/service abstractions per platform engine |
| host object/script bridge | explicit interop API in host wrapper |
| in-app web view fallback | launcher external-browser fallback |
WinUI XAML:
<WebView2 x:Name="Browser" Source="https://example.com" />
WinUI C#:
Browser.NavigationStarting += (_, e) =>
{
if (!IsAllowed(e.Uri))
e.Cancel = true;
};
await Browser.EnsureCoreWebView2Async();
Browser.CoreWebView2.Settings.IsScriptEnabled = true;
Avalonia XAML:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyApp.Controls">
<local:BrowserHost Url="{Binding Url}" />
</UserControl>
Avalonia C#:
public sealed class BrowserHost : NativeControlHost
{
public Uri? Url { get; set; }
public Task OpenExternallyAsync(Control anchor)
{
TopLevel? top = TopLevel.GetTopLevel(anchor);
return top is null || Url is null
? Task.CompletedTask
: top.Launcher.LaunchUriAsync(Url);
}
}