161 lines
3.8 KiB
Markdown
161 lines
3.8 KiB
Markdown
|
|
# 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
|