Primary WinUI APIs:
Primary Avalonia APIs:
| WinUI idiom | Avalonia idiom |
|---|---|
StaticResource for stable values |
StaticResource |
ThemeResource for theme-variant values |
DynamicResource + ThemeDictionaries |
| merged dictionary layering | merged dictionary layering |
| resource probe at runtime | TryGetResource(key, theme, out value) |
WinUI XAML:
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<SolidColorBrush x:Key="AccentBrush" Color="#0063B1" />
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="AccentBrush" Color="#4CC2FF" />
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Page.Resources>
<Border Background="{ThemeResource AccentBrush}" />
WinUI C#:
if (Application.Current.Resources.TryGetValue("AccentBrush", out var value) && value is SolidColorBrush brush)
{
HeaderBorder.Background = brush;
}
Avalonia XAML:
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<SolidColorBrush x:Key="AccentBrush" Color="#0063B1" />
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="AccentBrush" Color="#4CC2FF" />
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
<Border Background="{DynamicResource AccentBrush}" />
Avalonia C#:
if (Application.Current!.TryGetResource("AccentBrush", ThemeVariant.Dark, out var value) && value is IBrush brush)
{
HeaderBorder.Background = brush;
}
ThemeResource usage to DynamicResource with explicit ThemeDictionaries keys.