Files
community/Plugins/SDK/README.md
T
2026-04-05 14:06:49 +08:00

161 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ink Canvas Plugin SDK
Ink Canvas 插件开发SDK,用于开发墨迹画布应用的插件。
**命名空间**`InkCanvasForClass.PluginSdk`(避免与 WPF 控件 `System.Windows.Controls.InkCanvas` 在引用 `InkCanvas.*` 时产生歧义)。
## 方案 B:轻量注册表(无 Microsoft.Extensions.DependencyInjection
宿主在加载每个插件、调用 `Initialize` 之后,会调用 `InkCanvasPluginBase.RegisterExtensions(IPluginRegistry registry)`。插件可在此登记菜单项、工具栏按钮、设置页工厂;宿主窗口稍后统一挂载。注册表实现类型为 `InkCanvasForClass.PluginHost.CollectingPluginRegistry`,由主程序内 `PluginManager.Instance.ExtensionRegistry` 暴露。
## 安装
```bash
dotnet add package InkCanvas.PluginSdk
```
## 快速开始
### 1. 创建插件项目
创建一个新的类库项目,并添加对 `InkCanvas.PluginSdk` 的引用。
### 2. 实现插件接口
```csharp
using InkCanvas.PluginSdk;
using System;
using System.Windows.Controls;
namespace MyPlugin
{
public class MyPlugin : InkCanvasPluginBase
{
public override string Id => "com.example.myplugin";
public override string Name => "我的插件";
public override string Description => "这是一个示例插件";
public override Version Version => new Version(1, 0, 0);
public override string Author => "插件作者";
public override void Start()
{
// 插件启动时的逻辑
ShowNotification("插件已启动!", NotificationType.Success);
}
public override void Stop()
{
// 插件停止时的逻辑
ShowNotification("插件已停止!", NotificationType.Info);
}
public override UserControl GetSettingsView()
{
// 返回插件设置界面
return new MyPluginSettingsView();
}
}
}
```
### 3. 插件功能
#### 访问主应用程序功能
通过 `Context` 属性可以访问主应用程序的各种功能:
```csharp
// 获取当前画布
var canvas = Context.CurrentCanvas;
// 设置墨迹颜色
Context.SetInkColor(Colors.Red);
// 清除画布
Context.ClearCanvas();
// 显示通知
Context.ShowNotification("操作完成!", NotificationType.Success);
```
#### 创建菜单项
```csharp
public override IEnumerable<MenuItem> GetMenuItems()
{
var menuItem = new MenuItem
{
Header = "我的功能",
Icon = new Image { Source = MyIcon }
};
menuItem.Click += (s, e) => {
// 处理菜单点击
ShowNotification("菜单被点击了!");
};
return new[] { menuItem };
}
```
#### 创建工具栏按钮
```csharp
public override IEnumerable<Button> GetToolbarButtons()
{
var button = new Button
{
Content = "我的工具",
ToolTip = "这是一个工具按钮"
};
button.Click += (s, e) => {
// 处理按钮点击
Context.SetInkColor(Colors.Blue);
};
return new[] { button };
}
```
#### 事件处理
```csharp
public override void Start()
{
// 注册事件处理器
RegisterEventHandler("CanvasChanged", OnCanvasChanged);
RegisterEventHandler("DrawingModeChanged", OnDrawingModeChanged);
}
private void OnCanvasChanged(object sender, EventArgs e)
{
ShowNotification("画布已更改");
}
private void OnDrawingModeChanged(object sender, EventArgs e)
{
ShowNotification($"绘制模式已更改为: {Context.CurrentDrawingMode}");
}
```
## API 参考
### IInkCanvasPlugin 接口
插件必须实现的主要接口。
### IPluginContext 接口
提供对主应用程序功能的访问。
### InkCanvasPluginBase 基类
提供插件的基本实现,建议继承此类。
## 示例插件
查看 `Examples` 文件夹中的示例插件,了解如何实现各种功能。
## 许可证
MIT License