Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
| app-level requested theme | Application.RequestedThemeVariant |
| subtree theme override | ThemeVariantScope RequestedThemeVariant |
| high-contrast preference checks | PlatformColorValues.ContrastPreference |
| live system color/theme updates | IPlatformSettings.ColorValuesChanged |
WinUI XAML:
<Grid RequestedTheme="Dark"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" />
WinUI C#:
Application.Current.RequestedTheme = ApplicationTheme.Dark;
var accessibility = new AccessibilitySettings();
bool isHighContrast = accessibility.HighContrast;
Avalonia XAML:
<ThemeVariantScope xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
RequestedThemeVariant="Dark">
<Border Background="{DynamicResource ThemeBackgroundBrush}" />
</ThemeVariantScope>
Avalonia C#:
Application.Current!.RequestedThemeVariant = ThemeVariant.Dark;
if (Application.Current.PlatformSettings is { } platform)
{
ApplyContrast(platform.GetColorValues());
platform.ColorValuesChanged += (_, values) => ApplyContrast(values);
}
void ApplyContrast(PlatformColorValues values)
{
if (values.ContrastPreference == ColorContrastPreference.High)
Application.Current!.RequestedThemeVariant = ThemeVariant.Dark;
}
DynamicResource) rather than repainting manually.