Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
| AppInstance activation event | IActivatableLifetime.Activated |
| ExtendedActivationKind.Protocol | ProtocolActivatedEventArgs |
| ExtendedActivationKind.File | FileActivatedEventArgs |
| Launch arguments at startup | Startup event + Args |
| App lifecycle hooks | desktop lifetime Startup/Exit/ShutdownRequested |
WinUI XAML:
<StackPanel Spacing="6">
<TextBlock Text="Last activation:" />
<TextBlock Text="{x:Bind ViewModel.LastActivation, Mode=OneWay}" />
</StackPanel>
WinUI C#:
AppInstance.GetCurrent().Activated += (_, e) =>
{
switch (e.Kind)
{
case ExtendedActivationKind.Protocol:
var protocol = (ProtocolActivatedEventArgs)e.Data;
ViewModel.HandleUri(protocol.Uri);
break;
case ExtendedActivationKind.File:
var files = (FileActivatedEventArgs)e.Data;
ViewModel.HandleFiles(files.Files);
break;
}
};
Avalonia XAML:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels"
x:DataType="vm:ActivationViewModel">
<StackPanel Spacing="6">
<TextBlock Text="Last activation:" />
<TextBlock Text="{CompiledBinding LastActivation}" />
</StackPanel>
</UserControl>
Avalonia C#:
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.Startup += (_, e) => ViewModel.HandleStartupArgs(e.Args);
}
if (Application.Current?.TryGetFeature<IActivatableLifetime>() is { } activatable)
{
activatable.Activated += (_, e) =>
{
if (e is ProtocolActivatedEventArgs protocol)
ViewModel.HandleUri(protocol.Uri);
else if (e is FileActivatedEventArgs file)
ViewModel.HandleFiles(file.Files);
};
}
IActivatableLifetime hooks.