-
-
Notifications
You must be signed in to change notification settings - Fork 0
插件规范
由于微软对于WindowsApps
文件夹的限制,导致打包版应用(appx/msix打包版)无法修改自身安装文件夹
这对于插件系统的ms-appx://
识别存在重大影响
所以该插件模式你需要遵守一些要求来使得插件正常运行
你需要遵循以下四个要求
创建新的Page或者用户控件的时候
会自动生成一个构造函数
(以LoginTip
为例子)
public LoginTip()
{
InitializeComponent();
}
但是在插件中InitializeComponent()
无法正常加载
所以我们要改为
using CustomExtensions.WinUI;
public LoginTip()
{
this.LoadComponent(ref _contentLoaded);
}
这样就能正常识别插件的Xaml内容了
一般来说,我们会将一些常用的Color
,Style
塞到一个theme.xaml
中
这个theme.xaml
内部是ResourceDictionary
正常项目中我们都会塞到App.xaml
里,但是插件是没有App.xaml
的,所以在PluginBase
类中就实现了该功能
请用你自己的插件主类(比如我的是BikaPlugin
)实现以下方法
public override IEnumerable<ResourceDictionary> ResourceDictionaries => new List<ResourceDictionary>
{
new ResourceDictionary() { Source ="/Themes/BikaTheme.xaml".AssetUri<BikaPlugin>() }
};
这样会在插件加载进入本体的时候会自动合并到App.xaml
针对Assets文件夹内的图片或者其他文件
将在一般WinUI3应用中采用的
<Image Source="ms-appx:///Assets/Picacgs/picacomic_2.png" /> <!-- 这是错误的 ->
改为
<Image
xmlns:ee="using:CustomExtensions.WinUI"
Source="{x:Bind ee:WinUIExtensions.ImageSource('/Assets/Picacgs/picacomic_2.png')}" />
在这里我们引入了命名空间CustomExtensions.WinUI
然后使用静态方法WinUIExtensions.ImageSource
将相对路径/Assets/Picacgs/picacomic_2.png
修改为程序能够识别的路径
如果想要知道详细内容,请查看源码
如果你想使用代码:
using CustomExtensions.WinUI;
var image = new Image()
{
Source = "/Assets/Picacgs/picacomic_2.png".ImageSource<BikaPlugin>(),
};
BikaPlugin
即为你自己的插件主类,继承自PluginBase
- 在代码中获取本地化字符串
using CustomExtensions.WinUI;
public static string GetString(string key)
{
var resourceManager = ApplicationExtensionHost.GetResourceMapForAssembly();
return resourceManager.GetValue(key).ValueAsString;
}
- 在Xaml中获取本地化字符串
在这里建议继承MarkupExtension
实现一个自己的本地化类(例子:BikaLocaleExtension)
然后就可以在Xaml文件中使用
<TextBlock
xmlns:ex="using:ShadowViewer.Plugin.Bika.Extensions"
Text="{ex:BikaLocale Key=AboutDescription}" />
插件元数据是提供给应用本体读取的,所以对于任何插件来说都是必须的
插件元数据包含以下几项:
- 插件ID(Id)
- 插件名称(Name)
- 插件介绍(Description)
- 插件作者(Author)
- 插件版本(Version)
- 插件仓库地址(WebUri)
- 插件图标(Logo)
- 支持的插件管理器版本(MinVersion)
- 支持的语言(Lang)
- 依赖的插件ID(Require)
示例
[PluginMetaData("Bika",
"哔咔漫画",
"哔咔漫画适配器",
"kitUIN", "0.1.0",
"https://github.com/kitUIN/ShadowViewer.Plugin.Bika/",
"ms-appx:///Assets/Icons/logo.png",
20230808,
new []{"Local"},
new []{"zh-CN"}
)]
public partial class BikaPlugin : PluginBase
大小写不敏感,建议为英文
type:string
这是插件在应用中显示的名称
type:string
这是插件在应用中显示的介绍
type:string
这是插件在应用中显示的版本
type:string
这是插件在应用中显示的作者
type:string
这是插件在应用中允许跳转的仓库地址,请放入网络链接
type:string
如果是本地文件,请以ms-appx:///{相对位置}
开头
如果是FontIcon,请以font://{Glyph}
开头
如果是FluentIcon,请以fluent://{Glyph}
开头
type:string
type:int
type:string[]
type:string[]