跳到主要内容

自定义资源

在 Semi Avalonia 中,绝大多数影响控件样式的笔刷、尺寸等要素都以动态资源的方式引用,如果Semi Avalonia内置的配色及尺寸不满足您的要求,需要进行微调,可以采用覆写动态资源的方式为其重新赋值。

如何覆写动态资源

这里通过一个简单的示例来解释如何通过覆写动态资源来基于 Semi Avalonia 的样式进行微调

比如 当前版本 Semi Avalonia 的 Button 圆角为 3px。这可能并不满足您的项目需求,希望项目中所有的 Button 的圆角都变为 6。

通过 Semi Avalonia 的源代码 /src/Semi.Avalonia/Controls/Button.axaml 我们可以看到,Button 的 CornerRadius 通过如下方式赋值:

 <ControlTheme x:Key="{x:Type Button}" TargetType="Button">
<!--省略无关代码-->
<Setter Property="CornerRadius" Value="{DynamicResource ButtonCornerRadius}" />
<!--省略无关代码-->
</ControlTheme>

通过源代码 /src/Semi.Avalonia/Themes/Shared/Button.axaml 我们可以看到 ButtonCornerRadius 的定义:

<CornerRadius x:Key="ButtonCornerRadius">3</CornerRadius>

因此我们可以在App.axaml中重新为这个资源赋值

<Application
x:Class="Semi.Avalonia.Demo.App"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:semi="https://irihi.tech/semi"
RequestedThemeVariant="Light"
>
<Application.Styles>
<semi:SemiTheme Locale="zh-CN"/>
</Application.Styles>
<Application.Resources>
<CornerRadius x:Key="ButtonCornerRadius">6</CornerRadius>
</Application.Resources>
</Application>

如此,应用中的所有按钮圆角就都以及变成了 6px。

覆写动态资源的进阶用法

自定义资源还有更多进阶的用法,详见 自定义资源 - 进阶