在FluentAvalonia中为Avalonia使用.NET样式。
假设我想编辑默认样式,将按钮背景设置为AccentColor3,并在AccentColor2上悬停。我该怎么做?
首先,设置这种风格是有效的,但是设置ThemeAccentBrush3
不起作用。我如何将重音设置成一种既适用于黑暗主题又适用于浅色主题的方式?
<Style Selector="Button">
<Setter Property="Background" Value="{DynamicResource SystemAccentColorDark3}" />
</Style>
其次,我认为最好的方法是创建一个Avalonia字典文件
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StaticResource x:Key="ButtonBackground" ResourceKey="SystemAccentColorDark3" />
<StaticResource x:Key="ButtonBackgroundPointerOver" ResourceKey="SystemAccentColorDark2" />
</ResourceDictionary>
然后在App.axaml中引用
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceInclude Source='avares://Common.Avalonia.App/Styles/DarkResources.axaml'/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
但是,样式被加载到更低的位置,因此还不存在。
<Application.Styles>
<sty:FluentAvaloniaTheme />
因此..。
Static resource 'SystemAccentColorDark3' not found.
最干净的解决方案是什么?
发布于 2022-08-01 21:02:35
我设法获得了以.35不透明作为默认样式的“重音”样式,方法是将“重音”样式转换为不同的语法以覆盖资源.想出这个翻译的引用是相当复杂的,但它起作用了。
词典需要插入在FluentAvalonia之后的App.xaml中
此外,为了查阅可用资源列表,我可以运行FluentAvalonia示例应用程序,该应用程序有一个页面,可以可视化整个资源和颜色列表。
作为绑定以适应主题的注意事项: StaticResource只运行一次,DynamicResource跟踪更改。但是,要覆盖资源键,需要StaticResource
。
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:flu="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia">
<SolidColorBrush x:Key="ButtonBackgroundApp" Color="{DynamicResource SystemAccentColorLight2}" Opacity=".35" />
<StaticResource x:Key="ButtonBackground" ResourceKey="ButtonBackgroundApp" />
<LinearGradientBrush x:Key="ButtonBorderBrushApp" StartPoint="0,0" EndPoint="0,3" Opacity=".35">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.33" Color="{StaticResource ControlStrokeColorOnAccentSecondary}" />
<GradientStop Offset="1.0" Color="{StaticResource ControlStrokeColorOnAccentDefault}" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<StaticResource x:Key="ButtonBorderBrush" ResourceKey="ButtonBorderBrushApp" />
<SolidColorBrush x:Key="ButtonBackgroundPointerOverApp" Color="{DynamicResource SystemAccentColorLight2}"
Opacity=".30" />
<StaticResource x:Key="ButtonBackgroundPointerOver" ResourceKey="ButtonBackgroundPointerOverApp" />
<LinearGradientBrush x:Key="ButtonBorderBrushPointerOverApp" StartPoint="0,0" EndPoint="0,3" Opacity=".35">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.33" Color="{StaticResource ControlStrokeColorOnAccentSecondary}" />
<GradientStop Offset="1.0" Color="{StaticResource ControlStrokeColorOnAccentDefault}" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
<StaticResource x:Key="ButtonBorderBrushPointerOver" ResourceKey="ButtonBorderBrushPointerOverApp" />
<SolidColorBrush x:Key="ButtonBackgroundPressedApp" Color="{DynamicResource SystemAccentColorLight2}" Opacity=".27" />
<StaticResource x:Key="ButtonBackgroundPressed" ResourceKey="ButtonBackgroundPressedApp" />
<SolidColorBrush x:Key="ButtonBorderBrushPressedApp" Color="{DynamicResource ControlFillColorTransparent}"
Opacity=".35" />
<StaticResource x:Key="ButtonBorderBrushPressed" ResourceKey="ButtonBorderBrushPressedApp" />
<SolidColorBrush x:Key="ButtonBackgroundDisabledApp"
Color="{DynamicResource TextOnAccentFillColorDisabled}" Opacity=".35" />
<StaticResource x:Key="ButtonBackgroundDisabled" ResourceKey="ButtonBackgroundDisabledApp" />
<SolidColorBrush x:Key="ButtonBorderBrushDisabledApp"
Color="{DynamicResource ControlFillColorTransparent}" Opacity=".35" />
<StaticResource x:Key="ButtonBorderBrushDisabled" ResourceKey="ButtonBorderBrushDisabledApp" />
</ResourceDictionary>
https://stackoverflow.com/questions/73129320
复制相似问题