Live2D 看板娘 / Demo

Avalonia 学习之 资源使用

通常,样式和控件需要共享资源,例如(但不限于)画笔和颜色。您可以将此类资源房子每个样式和控件上可用的资源字典中,然后在其他地方引用这些资源。

声明资源

如果资源可供整个应用程序使用,则可以在App.axaml中定义它:

    <Application.Resources>
    		<SolidColorBrush x:Key="Warning"  
    						 Color="Yellow" />
    		
    		<SolidColorBrush x:Key="Success"
    					 Color="Green" />
    		
    </Application.Resources>

或者,您可以在窗口或用户控件上声明资源:该资源将可用于窗口/用户控件 及其子项:

	<Window.Resources>
		<SolidColorBrush x:Key="Error" Color="Red" />
	</Window.Resources>

或者在控件中声明资源

    <StackPanel.Resources>
        <SolidColorBrush x:Key="Fail" Color="Orange" />
    </StackPanel.Resources>

最常用的应该是单独抽离出来一个资源字典的文件
添加新建项的时候,选择 Resource Dictionary(Avalonia)

<ResourceDictionary xmlns="https://github.com/avaloniaui"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <!-- Add Resources Here -->
	<SolidColorBrush x:Key="Error" Color="Red" />
</ResourceDictionary>

引用资源

这个跟wpf使用方式是一样的,可以通过{DynmaicResource} 或 {StaticResource} 标记扩展引用资源,例如:

<Border Background="{DynamicResource Error}"/>
<Border Background="{StaticResource Fail}"/>

StaticResource 相比较与 DynamicResource

  • 它不会响应资源中的更改
  • 资源需要在同一XAML文件中生命

只是引入方式的区别,跟资源本身没啥关系。
静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了;
动态资源(DynamicResource)使用指的是在程序运行过程中然会去访问资源。

合并的资源字典

每个控件和样式上的Resource属性的类型未ResourceDictionary. 资源字典还可以通过使用
ResourceDictionary.MergedDictionaries属性来包含其他资源字典。要将资源字典包含在另一个资源字典中,您可以使用ResourceInclude类,例如:

窗体中引入资源

<Window.Resources>
		<ResourceDictionary>
			<ResourceDictionary.MergedDictionaries>
				<ResourceInclude Source="/Resources/BaseResource.axaml"/>
			</ResourceDictionary.MergedDictionaries>
		</ResourceDictionary>
</Window.Resources>

全局引入资源

<Application.Resources>
                <ResourceDictionary>
                        <ResourceDictionary.MergedDictionaries>
                                <ResourceInclude Source="/UserControls/Geometries.axaml" />
                        </ResourceDictionary.MergedDictionaries>
                </ResourceDictionary>
</Application.Resources>

主题资源

主题通常会将画笔、颜色和其他设置定义为资源。通过更改这些资源,例如可以从深色主题切换到浅色主题。具体实现可以参考 https://blog.csdn.net/mzl87/article/details/128067217

控件模板资源

TemplatedControl 控件最适合用于可在各种应用程序之间共享的泛型控件。它们是外观控件。这意味着它们可以针对不同的主题和应用程序设计样式。

比如

<ResourceDictionary xmlns="https://github.com/avaloniaui"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
					xmlns:controls="clr-namespace:CustomWindowDemo.Controls">
	<!-- Add Resources Here -->

	<ResourceDictionary.MergedDictionaries>
		<ResourceInclude Source="/UserControls/Geometries.axaml"/>

		<ResourceDictionary>
			<ControlTemplate x:Key="Default"
							 TargetType="controls:SystemDecorationControl">
						。。。。
				
			</ControlTemplate>

			<ControlTemplate x:Key="Light"
							 TargetType="controls:SystemDecorationControl">

						。。。
			</ControlTemplate>
		</ResourceDictionary>
	</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

这样我们就有了针对SystemDecorationControl控件的俩个模板资源,使用的时候 ,可以通过Template 来选择不同的模板资源

<uc:SystemDecorationControl Template="{StaticResource Default}" />

详细使用方式,在写控件模板的时候再细说吧。

posted @ 2023-04-18 11:17  MChuang  阅读(830)  评论(0编辑  收藏  举报