颜色和画刷必须定义在ResourceDictionary中并设x:Key,通过StaticResource/DynamicResource引用;支持ThemeDictionaries实现主题切换;资源字典需通过MergedDictionaries引入。

在Avalonia中,颜色和画刷属于资源(Resources),不是样式(Styles),必须定义在ResourceDictionary里,并通过StaticResource或DynamicResource引用。不能写在Styles块或样式文件中,否则会编译报错。
颜色和画刷要放在资源字典里
资源字典可以是独立文件(如Colors.axaml),也可以直接嵌入到App.xaml、Window.xaml等的Resources节内。关键点是:每个资源必须有x:Key,且类型要匹配。
-
SolidColorBrush用Color构造,或直接绑定已定义的Color资源 -
Color资源可单独定义,便于复用和主题切换 - 支持
GradientBrush、ImageBrush等,写法类似
示例(Colors.axaml):
#FF5494E2
在XAML中引用资源
只要资源字典已加载(通过MergedDictionaries或直接嵌入),就可以在任意控件属性中用{StaticResource KeyName}引用。
-
Background、Foreground、BorderBrush等属性都支持画刷资源 -
Color资源一般不直接用于控件属性,而是作为画刷的输入,或用于转换器参数 - 若需随系统主题动态更新,改用
{ThemeResource KeyName}(需配合ThemeDictionaries)
例如:
合并资源字典的两种常用方式
资源字典需要被“引入”才生效。推荐集中管理,比如在App.xaml中统一合并:
-
直接合并(立即加载):
-
延迟加载(按需):用
,之后在代码中手动取出来赋值给MergedDictionaries
注意路径写法:/Styles/Colors.axaml表示项目根目录下的相对路径;avares://AppName/...用于程序集内嵌资源。
配合主题自动切换颜色
如果希望颜色随亮色/暗色主题变化,要用ThemeDictionaries,而不是普通资源字典:
这样在{StaticResource AccentBrush}处引用时,Avalonia会根据当前主题自动选对应版本。
基本上就这些。资源定义要规范,引用要匹配作用域,主题适配靠ThemeDictionaries,不复杂但容易忽略层级和键名一致性。










