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

3.8 KiB
Raw Blame History

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 暴露。

安装

dotnet add package InkCanvas.PluginSdk

快速开始

1. 创建插件项目

创建一个新的类库项目,并添加对 InkCanvas.PluginSdk 的引用。

2. 实现插件接口

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 属性可以访问主应用程序的各种功能:

// 获取当前画布
var canvas = Context.CurrentCanvas;

// 设置墨迹颜色
Context.SetInkColor(Colors.Red);

// 清除画布
Context.ClearCanvas();

// 显示通知
Context.ShowNotification("操作完成!", NotificationType.Success);

创建菜单项

public override IEnumerable<MenuItem> GetMenuItems()
{
    var menuItem = new MenuItem
    {
        Header = "我的功能",
        Icon = new Image { Source = MyIcon }
    };
    menuItem.Click += (s, e) => {
        // 处理菜单点击
        ShowNotification("菜单被点击了!");
    };
    
    return new[] { menuItem };
}

创建工具栏按钮

public override IEnumerable<Button> GetToolbarButtons()
{
    var button = new Button
    {
        Content = "我的工具",
        ToolTip = "这是一个工具按钮"
    };
    button.Click += (s, e) => {
        // 处理按钮点击
        Context.SetInkColor(Colors.Blue);
    };
    
    return new[] { button };
}

事件处理

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