<?xml version="1.0"?>
<doc>
    <assembly>
        <name>InkCanvas.PluginSdk</name>
    </assembly>
    <members>
        <member name="T:Ink_Canvas.Plugins.HostApiRequirement">
            <summary>
            宿主的 API 兼容性要求，由 <see cref="!:PluginManager"/> 在加载前对所有插件生效。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.HostApiRequirement.CurrentApiVersion">
            <summary>
            当前宿主提供的插件 API 版本。插件在 manifest 中声明 <c>ApiVersion</c>，
            主版本相同且不高于此值即为兼容。
            <para>
            维护规则：<b>每次向 SDK 新增对外接口或在既有接口上追加成员，都必须抬升次版本号</b>
            （1.9.0 → 1.10.0），插件才有办法声明自己需要的能力下限。
            发生破坏性变更（删除/改签名）时抬主版本号，这会使所有声明旧主版本的插件停止加载。
            仅修复实现、不动接口时不需要改动。
            </para>
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.HostApiRequirement.HostVersion">
            <summary>
            当前宿主编译版本号，由 Nerdbank.GitVersioning 依据 <c>version.json</c> 与 git 状态自动生成，
            随构建自动更新，不再手动维护。
            <para>
            必须是 <c>static readonly</c> 而非 <c>const</c>：<c>const</c> 会在引用方编译期内联成字面量，
            导致通过 NuGet 引用本 SDK 的插件/宿主在只更新 SDK 程序集、未重新编译时仍读到旧版本号。
            </para>
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IAnnouncementService">
            <summary>
            公告服务：供插件读取宿主公告中心的未读数、历史与标记已读。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAnnouncementService.GetUnreadCount">
            <summary>未读公告数。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAnnouncementService.GetHistory">
            <summary>公告历史列表。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAnnouncementService.MarkAsRead(System.String)">
            <summary>把指定公告标记为已读。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAnnouncementService.MarkAllAsRead">
            <summary>全部标记为已读。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAnnouncementService.ClearHistory">
            <summary>清空公告历史。</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IAnnouncementService.UnreadCountChanged">
            <summary>未读数变化时触发。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginAnnouncement">
            <summary>
            公告条目（只读描述）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.Id">
            <summary>公告 ID。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.Title">
            <summary>标题。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.Summary">
            <summary>摘要。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.Content">
            <summary>完整内容。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.CreatedAt">
            <summary>发布时间。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.IsRead">
            <summary>是否已读。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginAnnouncement.IsNew">
            <summary>是否为新增（未读且未展示过）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IAppInfoService">
            <summary>
            应用信息服务：供插件读取宿主应用的基本信息。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppInfoService.Version">
            <summary>宿主版本号，如 "1.7.18.0 (sha)"。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppInfoService.RootPath">
            <summary>宿主安装目录路径（插件/设置/日志相对此路径）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppInfoService.IsUpdateInstalling">
            <summary>是否正在安装新版本（更新流程中）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppInfoService.IsUIAccessTopMostEnabled">
            <summary>是否已启用 UIAccess 置顶模式。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppInfoService.StartWithBoardMode">
            <summary>本次启动是否带 --board 参数（直接进入白板模式）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IAppRestartService">
            <summary>
            应用重启服务：供插件以指定权限/置顶模式重启宿主应用。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IAppRestartService.IsRunningAsAdmin">
            <summary>当前宿主进程是否以管理员身份运行。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.RestartApp(System.Boolean)">
            <summary>重启宿主应用。</summary>
            <param name="asAdmin">true 时以管理员权限重启；false 时以普通权限重启。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.RestartWithCurrentPrivileges">
            <summary>以当前权限重启宿主应用。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.RestartAsAdmin">
            <summary>以管理员权限重启宿主应用。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.RestartAsNormal">
            <summary>以普通权限重启宿主应用。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.SwitchToUIATopMostAndRestart">
            <summary>开启 UIA 置顶模式并重启宿主应用。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IAppRestartService.SwitchToNormalTopMostAndRestart">
            <summary>切换到普通置顶模式并重启宿主应用。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IBackupService">
            <summary>
            自动备份服务：供插件控制宿主的设置文件自动备份（复制 Settings.json 到备份目录）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IBackupService.ShouldPerformAutoBackup">
            <summary>是否已到达自动备份时机（由宿主备份间隔设置决定）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IBackupService.PerformAutoBackup">
            <summary>执行一次备份。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IBackupService.TryRestoreFromBackup">
            <summary>从最近一次备份恢复设置文件。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IBackupService.CleanupOldBackups">
            <summary>清理过期备份。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ICameraService">
            <summary>
            摄像头服务：供插件枚举摄像头、启动预览、接收帧回调与拍照。
            <para>底层复用宿主视频展台的 DirectShow 采集（<c>CameraServiceFactory.Create()</c>），
            与展台共用摄像头设备——插件启动预览可能抢占展台正在使用的设备。</para>
            <para>帧回调在后台线程触发，返回的 <see cref="T:System.Windows.Media.Imaging.BitmapSource"/> 已 Freeze。</para>
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.ICameraService.FrameReceived">
            <summary>每收到一帧时触发（参数为已 Freeze 的位图）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICameraService.IsCapturing">
            <summary>当前是否正在预览。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICameraService.AvailableCameras">
            <summary>可用摄像头列表。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICameraService.RotationAngle">
            <summary>旋转角度（0=0°, 1=90°, 2=180°, 3=270°）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICameraService.NativeResolutions">
            <summary>当前摄像头支持的 native 分辨率列表。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICameraService.SelectedResolutionIndex">
            <summary>当前选中的 native 分辨率索引（<see cref="P:Ink_Canvas.Plugins.ICameraService.NativeResolutions"/> 的索引）；-1 未选中。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICameraService.RefreshCameraListAsync">
            <summary>刷新可用摄像头列表。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICameraService.StartPreviewAsync(System.Int32)">
            <summary>启动指定摄像头（索引来自 <see cref="P:Ink_Canvas.Plugins.ICameraService.AvailableCameras"/>）的预览。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICameraService.StopPreview">
            <summary>停止预览。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICameraService.GetCurrentFrame">
            <summary>获取当前帧位图（已 Freeze），用于拍照。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginCameraInfo">
            <summary>
            摄像头信息。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginCameraInfo.Name">
            <summary>摄像头名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginCameraInfo.MonikerString">
            <summary>设备 Moniker 标识（用于 <see cref="M:Ink_Canvas.Plugins.ICameraService.StartPreviewAsync(System.Int32)"/>）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginResolutionInfo">
            <summary>
            摄像头分辨率（宽×高×帧率）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginResolutionInfo.Width">
            <summary>分辨率宽度（像素）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginResolutionInfo.Height">
            <summary>分辨率高度（像素）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginResolutionInfo.FrameRate">
            <summary>帧率（FPS）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ICanvasCompositionService">
            <summary>
            画布合成服务：允许插件向宿主画布下方注入全屏背景层，并把「背景 + 墨迹」按页导出。
            <para>
            典型用法（以 PDF 阅读器为例）：
            <list type="number">
            <item>调用 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.InjectBackgroundLayer(System.Func{System.Windows.FrameworkElement})"/> 把自己的页面视图放到 InkCanvas 下方；</item>
            <item>调用 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.ConfigurePages(System.UInt32,System.UInt32,System.Func{System.UInt32,System.Threading.CancellationToken,System.Threading.Tasks.Task{System.Windows.Media.Imaging.BitmapSource}})"/> 告知总页数、当前页与离屏渲染回调；</item>
            <item>自己翻页后调用 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetCurrentPageAsync(System.UInt32,System.Threading.CancellationToken)"/>，宿主会自动保存/恢复每页墨迹；</item>
            <item>需要成品时调用 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.ExportWithInkAsync(System.String,System.UInt32,System.Threading.CancellationToken)"/>。</item>
            </list>
            </para>
            所有方法都可以从任意线程调用，宿主内部会切换到 UI 线程。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.InjectBackgroundLayer(System.Func{System.Windows.FrameworkElement})">
            <summary>
            给插件注入全屏背景层。<paramref name="backgroundFactory"/> 在 UI 线程被调用一次，
            返回的元素会被放到 InkCanvas 下方并铺满画布，不参与命中测试（不会抢走书写事件）。
            重复调用会替换掉上一次注入的背景层。传入 <c>null</c> 等价于 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.RemoveBackgroundLayer"/>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.RemoveBackgroundLayer">
            <summary>
            移除已注入的背景层，并清空按页墨迹缓存与分页配置。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasCompositionService.HasBackgroundLayer">
            <summary>当前是否已注入背景层。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetPageContentRect(System.Nullable{System.Windows.Rect})">
            <summary>
            声明背景层内真正承载页面内容的矩形（背景元素坐标系，DIP）。
            <para>
            背景以 Uniform 等方式居中留边时必须调用：导出会只取该矩形作为 PDF 页面，
            从而保持页面原始宽高比，并把墨迹按同一矩形换算，避免被拉伸成画布比例。
            矩形外的墨迹（画在留边上的）导出时会被裁掉。
            </para>
            传 <c>null</c> 表示整个背景层都是页面内容（默认行为）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.ConfigurePages(System.UInt32,System.UInt32,System.Func{System.UInt32,System.Threading.CancellationToken,System.Threading.Tasks.Task{System.Windows.Media.Imaging.BitmapSource}})">
            <summary>
            配置分页信息。<paramref name="pageRenderer"/> 用于导出非当前页时离屏渲染背景，
            参数为从 0 开始的页索引，返回已 Freeze 的位图；为 <c>null</c> 时只能导出当前页。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasCompositionService.PageCount">
            <summary>背景层的总页数，未配置时为 0。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasCompositionService.CurrentPageIndex">
            <summary>背景层当前页索引（从 0 开始）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetCurrentPageAsync(System.UInt32,System.Threading.CancellationToken)">
            <summary>
            通知宿主背景层已切换到 <paramref name="pageIndex"/>：
            宿主会先把画布上的墨迹存入原页，清空画布，再恢复目标页此前的墨迹。
            插件应在自己完成翻页渲染后调用。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetVisiblePagesAsync(System.Collections.Generic.IReadOnlyList{Ink_Canvas.Plugins.PluginVisiblePage},System.Threading.CancellationToken)">
            <summary>
            以「多可见页」方式切换背景层内容（双页等）。宿主会：
            <list type="number">
            <item>把画布墨迹按 <c>ContentRect</c> 逐个裁剪，存入对应 <c>PageIndex</c>；</item>
            <item>清空画布；</item>
            <item>把新可见页各自的墨迹恢复到画布。</item>
            </list>
            与 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetCurrentPageAsync(System.UInt32,System.Threading.CancellationToken)"/> 的区别：一次显示多页时，墨迹必须按矩形切分到各物理页，
            否则左右页笔迹会混进同一个页索引。列表里的页索引需按从 0 开始、升序给出。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.ScrollOffsetAsync(System.Double,System.Threading.CancellationToken)">
            <summary>
            连续滚动：把当前画布墨迹整体平移 <paramref name="deltaY"/>（DIP），
            与插件背景长条的滚动保持一致。插件应在滚动背景层后立即调用，使墨迹实时跟随。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetCanvasGestureHandler(Ink_Canvas.Plugins.IPluginCanvasGestureHandler)">
            <summary>
            注册/注销画布双指手势处理器。宿主在检测到画布上的双指操作
            （捏合/平移，见 <see cref="T:Ink_Canvas.Plugins.IPluginCanvasGestureHandler"/>）时，会优先转发给该处理器；
            处理器返回 <c>true</c> 表示插件接管该事件，宿主跳过默认的墨迹/画布变换。
            传 <c>null</c> 表示注销。同一时刻只允许一个处理器。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetCanvasContentAnchor(System.Windows.FrameworkElement)">
            <summary>
            声明背景层内的「内容锚点」：墨迹换算（<see cref="!:TransformToVisual"/>）的目标元素。
            当插件把页面内容放在一个会缩放/平移的容器里、而容器之外还有固定背景时，
            必须把锚点指向该内容容器，宿主才能把缩放正确纳入墨迹的按页存取换算。
            传 <c>null</c> 表示使用注入的背景层根节点（默认）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.TransformInkAsync(System.Windows.Media.Matrix,System.Threading.CancellationToken)">
            <summary>
            按 <paramref name="matrix"/> 变换当前画布上的全部墨迹（仅变换笔画坐标，
            保留笔尖宽度），用于双指缩放/平移时让墨迹与插件背景层实时同步。
            变换作用于画布坐标（与背景层 RenderTransform 同一坐标系）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.GetStrokesForPageAsync(System.UInt32,System.Threading.CancellationToken)">
            <summary>
            读取指定页的墨迹副本，坐标已绑定到背景层页面坐标系
            （原点为背景元素左上角，单位为设备无关像素，与 <see cref="P:System.Windows.FrameworkElement.ActualWidth"/> 同尺度）。
            该页没有墨迹时返回空集合。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasCompositionService.ExportWithInkAsync(System.String,System.UInt32,System.Threading.CancellationToken)">
            <summary>
            把「背景 + 墨迹」合成后导出为 PDF：从 <paramref name="pageIndex"/> 起直到末页，
            每页先合成一张图片再组装成新 PDF。返回实际写入的文件路径。
            </summary>
            <param name="outputPath">输出 PDF 路径；所在目录不存在时会被创建。</param>
            <param name="pageIndex">起始页索引（从 0 开始）。</param>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginVisiblePage">
            <summary>
            一个可见页：页索引 + 该页在背景层内占据的矩形（背景元素坐标系，DIP）。
            供 <see cref="M:Ink_Canvas.Plugins.ICanvasCompositionService.SetVisiblePagesAsync(System.Collections.Generic.IReadOnlyList{Ink_Canvas.Plugins.PluginVisiblePage},System.Threading.CancellationToken)"/> 使用。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginVisiblePage.PageIndex">
            <summary>物理页索引（从 0 开始）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginVisiblePage.ContentRect">
            <summary>该页在背景层内占据的矩形；用于墨迹按矩形切分。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ICanvasElementService">
            <summary>
            画布元素服务：允许插件把任意 WPF 控件作为「元素」插入主画布，
            复用宿主对图片/媒体元素的完整交互（拖动、缩放、旋转、触摸、撤销历史、冻结页保护）。
            <para>
            典型用法（如单词卡片、可点击的教具控件）：
            <list type="number">
            <item>用 XAML/C# 构造一个 <see cref="T:System.Windows.FrameworkElement"/> 控件（Grid/StackPanel/Border 等）；</item>
            <item>调用 <see cref="M:Ink_Canvas.Plugins.ICanvasElementService.InsertElement(System.Windows.FrameworkElement)"/> 插入画布（居中、自动尺寸、进撤销历史、切选择模式）；</item>
            <item>用户可像拖动图片一样拖动/缩放/旋转该控件，并按 Ctrl+Z 撤销插入；</item>
            <item>控件内部的按钮/滑块等交互子元素，在选中模式下可正常点击（宿主已做命中穿透处理）。</item>
            </list>
            </para>
            <para>
            所有方法都可以从任意线程调用，宿主内部会切换到 UI 线程。
            元素只存在于当前会话的画布/页面历史中，不会随 .ink/.elements.json 持久化到磁盘，
            翻页后由页面历史恢复到画布，但交互/事件绑定会随会话重建。
            </para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasElementService.InsertElement(System.Windows.FrameworkElement)">
            <summary>
            把控件插入当前画布：居中放置（最大为画布 70%，无显式尺寸时按内容测量），
            写入 TimeMachine 历史（可按 Ctrl+Z 撤销），并切换到选择模式。
            当前页冻结时返回 <c>false</c>；传入 <c>null</c> 或控件已有父容器时返回 <c>false</c>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasElementService.InsertElement(System.Windows.FrameworkElement,System.Windows.Point)">
            <summary>
            把控件插入当前画布，使控件左上角对齐到 <paramref name="position"/>（画布坐标），
            不缩放、不居中。其余行为同 <see cref="M:Ink_Canvas.Plugins.ICanvasElementService.InsertElement(System.Windows.FrameworkElement)"/>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasElementService.TryRemoveElement(System.Windows.FrameworkElement)">
            <summary>
            从当前画布移除指定控件，并写入撤销历史（可按 Ctrl+Z 恢复）。
            控件不在画布上时返回 <c>false</c>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasElementService.ContainsElement(System.Windows.FrameworkElement)">
            <summary>指定控件当前是否位于画布上。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasElementService.GetElements">
            <summary>当前画布上全部元素控件的只读快照（元素本身即画布坐标下可直接使用的实例）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginInkTool">
            <summary>
            画布工具枚举。用于 <see cref="M:Ink_Canvas.Plugins.ICanvasInkService.SelectTool(Ink_Canvas.Plugins.PluginInkTool)"/> 切换主画布工具。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.Select">
            <summary>选择（套索）。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.Pen">
            <summary>画笔。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.Eraser">
            <summary>点橡皮擦。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.StrokeEraser">
            <summary>笔画橡皮擦。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.Shape">
            <summary>几何形状绘制（矩形）。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginInkTool.Roaming">
            <summary>漫游（抓手，仅白板模式有效）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ICanvasInkService">
            <summary>
            画布墨迹服务：允许插件读取、插入、清除主画布墨迹，切换工具，
            控制白板分页、撤销/重做与墨迹冻结。
            <para>
            所有方法都可以从任意线程调用，宿主内部会切换到 UI 线程。
            插入/清除会写入 TimeMachine 历史（可按 Ctrl+Z 撤销），
            当前页处于墨迹冻结状态时，变更类操作会被拒绝并返回 <c>false</c>。
            </para>
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.IsPenMode">
            <summary>当前是否处于画笔/墨迹模式。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.IsPageFrozen">
            <summary>当前页是否已冻结（墨迹锁定，禁止变更）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.CanUndo">
            <summary>是否可以撤销。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.CanRedo">
            <summary>是否可以重做。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.CurrentWhiteboardPage">
            <summary>当前白板页索引（从 1 开始）；非白板模式返回 0。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.WhiteboardPageCount">
            <summary>白板总页数；非白板模式返回 0。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ICanvasInkService.CanvasSize">
            <summary>主画布的实际尺寸（设备无关像素），供坐标换算/居中插入。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.GetDefaultDrawingAttributes">
            <summary>
            当前默认笔触属性（颜色/粗细/荧光笔）。返回克隆副本，修改不影响宿主。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.GetStrokes">
            <summary>
            当前画布上全部墨迹的克隆副本（画布坐标）。返回的集合不共享内部引用，
            修改不会影响宿主画布。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.TryAddStrokes(System.Windows.Ink.StrokeCollection)">
            <summary>
            把墨迹插入当前画布（保持原坐标），并写入 TimeMachine 历史（可按 Ctrl+Z 撤销）。
            当前页冻结时返回 <c>false</c>；传入空集合返回 <c>false</c>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.TryAddStrokes(System.Windows.Ink.StrokeCollection,System.Windows.Point)">
            <summary>
            把墨迹插入当前画布，并使墨迹包围盒中心对齐到 <paramref name="center"/>（画布坐标）。
            其余行为同 <see cref="M:Ink_Canvas.Plugins.ICanvasInkService.TryAddStrokes(System.Windows.Ink.StrokeCollection)"/>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.TryClearStrokes">
            <summary>
            清空当前画布墨迹，并写入 TimeMachine 历史（可按 Ctrl+Z 撤销）。
            当前页冻结时返回 <c>false</c>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.SelectTool(Ink_Canvas.Plugins.PluginInkTool)">
            <summary>
            切换画布工具。当前页冻结时，编辑类工具（笔/橡皮/选择）会被拒绝并返回 <c>false</c>。
            </summary>
            <returns>是否切换成功。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.Undo">
            <summary>撤销上一步操作。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.Redo">
            <summary>重做下一步操作。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.SwitchToPreviousPage">
            <summary>翻到上一白板页。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.SwitchToNextPage">
            <summary>翻到下一白板页（已在末页时新增一页）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.AddWhiteboardPage">
            <summary>新增一页白板。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.DeleteWhiteboardPage">
            <summary>删除当前白板页（仅剩一页时无效）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.InsertImage">
            <summary>
            打开「从文件插入图片」流程（文件对话框 + 插入画布）。
            返回是否成功触发流程；当前页冻结或不可插入时返回 false。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ChangeBackgroundColor">
            <summary>更换当前画布背景色（打开颜色选择）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ToggleGesture">
            <summary>切换双指手势（画布平移/缩放）开关。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ExitWhiteboard">
            <summary>退出白板模式（回到浮动栏）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ToggleInkFreeze">
            <summary>切换当前页的墨迹冻结状态。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ExportCurrentPageAsPng(System.String)">
            <summary>
            把当前画布页（墨迹 + 背景色）导出为 PNG 文件。
            </summary>
            <param name="filePath">输出 PNG 路径（目录需已存在）。</param>
            <returns>是否导出成功。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.ExportStrokesAsPng(System.Windows.Ink.StrokeCollection,System.String)">
            <summary>
            把指定墨迹集合渲染为 PNG 文件。
            </summary>
            <param name="strokes">要导出的墨迹。</param>
            <param name="filePath">输出 PNG 路径（目录需已存在）。</param>
            <returns>是否导出成功。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.InsertBitmap(System.Windows.Media.Imaging.BitmapSource)">
            <summary>
            把图片插入当前画布（居中缩放、进入撤销历史、切换到选择模式）。
            </summary>
            <param name="bitmapSource">要插入的图片。</param>
            <returns>是否已触发插入流程。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ICanvasInkService.PasteClipboardImageAsync(System.Nullable{System.Windows.Point})">
            <summary>
            把剪贴板图片粘贴到画布（可选指定坐标）。
            </summary>
            <param name="position">插入位置（画布坐标）；null 表示居中。</param>
            <returns>是否已触发粘贴流程。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.IClipboardService">
            <summary>
            剪贴板服务：允许插件读取/写入系统剪贴板文本与图像，并订阅剪贴板变化事件。
            <para>宿主已挂接系统剪贴板监听（AddClipboardFormatListener），
            <see cref="E:Ink_Canvas.Plugins.IClipboardService.ClipboardUpdate"/> 在剪贴板文本/图像变化时触发。</para>
            <para>所有方法都应在 UI 线程调用（WPF Clipboard 依赖 STA 线程）。</para>
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IClipboardService.ClipboardUpdate">
            <summary>系统剪贴板内容（文本/图像）变化时触发。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IClipboardService.GetText">
            <summary>读取剪贴板文本；剪贴板不含文本时返回空字符串。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IClipboardService.SetText(System.String)">
            <summary>写入文本到剪贴板。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IClipboardService.GetImage">
            <summary>读取剪贴板图像；剪贴板不含图像时返回 null。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IClipboardService.SetImage(System.Windows.Media.Imaging.BitmapSource)">
            <summary>把图像写入剪贴板。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IClipboardService.ContainsImage">
            <summary>剪贴板当前是否包含图像。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IConfigProfileService">
            <summary>
            配置方案服务：供插件管理宿主的「配置方案」（一套 Settings.json 的快照）。
            与设置窗口里的配置方案管理共用同一存储目录。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IConfigProfileService.ListProfiles">
            <summary>列出所有已保存的方案名。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IConfigProfileService.GetProfilePath(System.String)">
            <summary>获取指定方案的存储文件路径。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IConfigProfileService.SaveAsProfile(System.String,System.String)">
            <summary>把 settingsJson 内容保存为指定名称的方案。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IConfigProfileService.ApplyProfile(System.String)">
            <summary>应用指定方案（覆盖当前 Settings.json 并热重载）。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IConfigProfileService.DeleteProfile(System.String)">
            <summary>删除指定方案。返回是否成功。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IEventService">
            <summary>
            事件服务，供插件订阅主程序事件。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.WhiteboardModeChanged">
            <summary>白板模式切换时触发（true=进入白板，false=退出白板）</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.PenModeChanged">
            <summary>画笔模式切换时触发（true=画笔模式，false=鼠标模式）</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.SlideChanged">
            <summary>PPT 翻页时触发（当前页码）</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.SlideShowStarted">
            <summary>PPT 开始放映时触发</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.SlideShowEnded">
            <summary>PPT 结束放映时触发</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.TopMostChanged">
            <summary>窗口置顶状态变化时触发</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.AppExiting">
            <summary>应用即将退出时触发</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.StrokesChanged">
            <summary>
            画布墨迹集合变化时触发（added, removed）。
            冻结页回滚等宿主内部程序性回滚不触发；插件自身通过
            <see cref="T:Ink_Canvas.Plugins.ICanvasInkService"/> 插入/清除也会触发，注意避免在处理器内再次写入造成循环。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.WhiteboardPageChanged">
            <summary>白板当前页/总页数变化时触发（pageIndex 从 1 开始，pageCount 总页数）。</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IEventService.UndoRedoStateChanged">
            <summary>撤销/重做可用状态变化时触发（canUndo, canRedo）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IFileAssociationService">
            <summary>
            文件关联服务，供插件注册自定义文件类型关联。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileAssociationService.Register(System.String,System.String,System.String,System.String)">
            <summary>
            注册文件关联（需要管理员权限）。
            </summary>
            <param name="extension">文件扩展名，如 ".icstk"</param>
            <param name="progId">程序标识符，如 "InkCanvasForClass.CE.icstk"</param>
            <param name="description">文件类型描述</param>
            <param name="iconPath">图标路径（可选）</param>
            <returns>是否注册成功</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileAssociationService.Unregister(System.String)">
            <summary>
            注销文件关联。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileAssociationService.IsRegistered(System.String)">
            <summary>
            检查文件关联是否已注册。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IFileDialogService">
            <summary>
            文件对话框服务：供插件弹出标准的 Windows 打开/保存文件对话框。
            <para>宿主内部切到 UI 线程展示对话框，以宿主主窗口为所有者。</para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileDialogService.OpenFile(System.String,System.String,System.String)">
            <summary>
            弹出「打开文件」对话框。
            </summary>
            <param name="title">对话框标题。</param>
            <param name="filter">文件过滤器，如 "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"；null 用默认。</param>
            <param name="initialDirectory">初始目录；null 用上次目录。</param>
            <returns>选中的文件路径；用户取消返回 null。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileDialogService.OpenFiles(System.String,System.String,System.String)">
            <summary>
            弹出「打开文件」对话框，允许多选。
            </summary>
            <returns>选中的文件路径列表；用户取消返回空数组。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IFileDialogService.SaveFile(System.String,System.String,System.String,System.String)">
            <summary>
            弹出「另存为」对话框。
            </summary>
            <param name="defaultFileName">默认文件名。</param>
            <returns>选中的保存路径；用户取消返回 null。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.IHotkeyService">
            <summary>
            快捷键服务，供插件注册自定义全局热键。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.Register(System.String,System.UInt32,System.UInt32,System.Action)">
            <summary>
            注册全局热键。
            </summary>
            <param name="id">热键唯一标识</param>
            <param name="modifiers">修饰键组合（Ctrl=2, Alt=1, Shift=4, Win=8）</param>
            <param name="key">虚拟键码（如 0x42 = B）</param>
            <param name="callback">按下时的回调</param>
            <returns>是否注册成功</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.Unregister(System.String)">
            <summary>
            注销全局热键。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.IsRegistered(System.String)">
            <summary>
            检查热键是否已注册。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.GetRegisteredHotkeys">
            <summary>
            获取宿主当前已注册的全部热键（含内置热键）的只读描述。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.UpdateHotkey(System.String,System.Windows.Input.Key,System.Windows.Input.ModifierKeys)">
            <summary>
            更新宿主内置热键的按键组合（按热键名称，如 "Undo"、"Redo"）。
            </summary>
            <returns>是否更新成功。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.EnableRegistration">
            <summary>启用宿主热键注册（恢复响应）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IHotkeyService.DisableRegistration">
            <summary>停用宿主热键注册（所有热键暂停响应）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginHotkeyInfo">
            <summary>
            热键信息（只读描述，不含回调）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHotkeyInfo.Name">
            <summary>热键名称（如 "Undo"）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHotkeyInfo.Key">
            <summary>主键。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHotkeyInfo.Modifiers">
            <summary>修饰键组合。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IInkEffectService">
            <summary>
            墨迹特效服务：供插件控制宿主画布的墨迹渐变消隐动画（InkFade）。
            <para>宿主画布上的墨迹按时间渐隐消失，用于演示/答题场景的自动擦除效果。</para>
            <para>底层复用宿主 <c>InkFadeManager</c>；画布未初始化时调用方法可能无效，
            但不会抛出异常。</para>
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IInkEffectService.IsEnabled">
            <summary>墨迹渐隐是否启用。写入即生效。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IInkEffectService.FadeTime">
            <summary>渐隐时长（毫秒）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IInkEffectService.FadeSpeedMultiplier">
            <summary>渐隐速度倍率。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.AddFadingStroke(System.Windows.Ink.Stroke,System.Windows.Point,System.Windows.Point,System.Int64)">
            <summary>
            把一条墨迹加入渐隐队列（从 <paramref name="startPoint"/> 画到 <paramref name="endPoint"/>，
            持续 <paramref name="strokeDurationMs"/> 毫秒后渐隐消失）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.RemoveStroke(System.Windows.Ink.Stroke)">
            <summary>从渐隐队列移除指定墨迹（立即停止其渐隐动画）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.ClearAllFadingStrokes">
            <summary>清空全部渐隐墨迹。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.UpdateFadeTime(System.Int32)">
            <summary>更新渐隐时长（毫秒）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.UpdateFadeSpeedMultiplier(System.Double)">
            <summary>更新渐隐速度倍率。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.Enable">
            <summary>启用墨迹渐隐。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IInkEffectService.Disable">
            <summary>停用墨迹渐隐。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.INameRosterService">
            <summary>
            点名花名册服务：供插件管理宿主「随机点名」功能的学生花名册。
            与宿主设置里的花名册管理共用同一存储（Names.txt / Replace.txt / 方案目录）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.GetSelectedRoster">
            <summary>当前选中的花名册（含名单内容与替换规则）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.ReadCurrentFiles">
            <summary>读取当前生效的 Names.txt / Replace.txt 原始内容。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.WriteCurrentFiles(System.String,System.String)">
            <summary>写入当前生效的 Names.txt / Replace.txt。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.ApplyRoster(Ink_Canvas.Plugins.PluginNameRoster)">
            <summary>把给定花名册内容应用为当前生效名单。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.SelectAndApply(System.String)">
            <summary>按 guid 选中并应用对应花名册。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.SaveCurrentFilesToRoster(System.String)">
            <summary>把当前生效名单内容保存到指定 guid 的花名册。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.AddRoster(System.String)">
            <summary>新建一个花名册，返回其 guid。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.RenameRoster(System.String,System.String)">
            <summary>重命名指定花名册。返回是否成功。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INameRosterService.DeleteRoster(System.String)">
            <summary>删除指定花名册。返回是否成功。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginNameRoster">
            <summary>
            花名册（与宿主 Settings.NameRoster 一致）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNameRoster.Guid">
            <summary>唯一标识。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNameRoster.Name">
            <summary>方案名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNameRoster.NamesContent">
            <summary>名单内容（每行一人）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNameRoster.ReplaceContent">
            <summary>替换规则内容（每行一条）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.INotificationService">
            <summary>
            通知服务，供插件发送应用内通知。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INotificationService.Show(System.String,System.String,Ink_Canvas.Plugins.NotificationLevel)">
            <summary>
            发送一条通知消息。
            </summary>
            <param name="title">通知标题</param>
            <param name="message">通知内容</param>
            <param name="level">通知级别</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.INotificationService.Show(System.String,System.String,Ink_Canvas.Plugins.NotificationLevel,System.Action)">
            <summary>
            发送一条带点击回调的通知。
            灵动通知会显示操作按钮，用户点击后触发 <paramref name="onClicked"/>。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INotificationService.GetHistory(System.String)">
            <summary>
            读取通知历史（宿主通知中心保留最近 100 条）。
            </summary>
            <param name="source">按来源过滤；null 表示全部。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.INotificationService.ClearHistory(System.String)">
            <summary>
            清空通知历史（按来源过滤；null 清空全部）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.INotificationService.ShowWindowsToast(System.String,System.String)">
            <summary>
            发送一条 Windows 系统通知中心 toast（Win7 自动降级为托盘气球通知）。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.NotificationLevel">
            <summary>
            通知级别。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.NotificationLevel.Info">
            <summary>信息。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.NotificationLevel.Warning">
            <summary>警告。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.NotificationLevel.Error">
            <summary>错误。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.NotificationLevel.Success">
            <summary>成功。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginNotification">
            <summary>
            通知历史条目（只读描述）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.Title">
            <summary>通知标题。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.Summary">
            <summary>通知内容。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.Source">
            <summary>通知来源。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.Icon">
            <summary>通知图标名（如 "Info"/"Warning"）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.Level">
            <summary>通知级别字符串（"Low"/"Normal"/"High"/"Critical"）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginNotification.CreatedAt">
            <summary>创建时间。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPlugin">
            <summary>
            插件接口。每个插件须有一个实现此接口的类；建议用 <see cref="T:Ink_Canvas.Plugins.PluginEntranceAttribute"/> 标记（未标记时宿主自动回退查找 <see cref="T:Ink_Canvas.Plugins.PluginBase"/> 子类或任意实现）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Id">
            <summary>插件唯一标识，如 "com.example.myplugin"。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Name">
            <summary>插件显示名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Version">
            <summary>插件版本号。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Description">
            <summary>插件描述。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Author">
            <summary>插件作者。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPlugin.Order">
            <summary>插件列表排序（数值越小越靠前；实际加载顺序由依赖解析决定）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPlugin.Initialize(Ink_Canvas.Plugins.IPluginHost)">
            <summary>初始化插件。所有注册动作（服务、工具栏项、IPC 处理器等）必须在此时完成。</summary>
            <param name="host">宿主 API 入口。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPlugin.Shutdown">
            <summary>卸载插件时调用，释放插件持有的资源。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPlugin.GetMainView">
            <summary>获取插件主视图控件；返回 null 表示无。</summary>
            <returns>主视图控件；null 表示无。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPlugin.GetSettingsView">
            <summary>获取插件设置视图控件；返回 null 表示无。</summary>
            <returns>设置视图控件；null 表示无。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPluginCanvasGestureHandler">
            <summary>
            画布双指手势处理器：宿主把 InkCanvas 上的操作（Manipulation）事件转发给插件，
            用于实现插件背景层的双指缩放/平移，并让墨迹与背景同步。
            <para>
            宿主在以下时机回调（均发生在 UI 线程）：
            <list type="number">
            <item><see cref="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureStarting(System.Windows.Input.ManipulationStartingEventArgs)"/> — 操作即将开始，返回 <c>true</c> 表示插件接管，
                此时插件应在 <see cref="P:System.Windows.Input.ManipulationStartingEventArgs.Mode"/> 里声明需要的手势类型
                （如 <see cref="F:System.Windows.Input.ManipulationModes.Scale"/> | <see cref="F:System.Windows.Input.ManipulationModes.Translate"/>）；</item>
            <item><see cref="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureDelta(System.Windows.Input.ManipulationDeltaEventArgs)"/> — 操作增量，返回 <c>true</c> 表示插件已处理，
                宿主将跳过默认的墨迹/画布变换；</item>
            <item><see cref="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureCompleted(System.Windows.Input.ManipulationCompletedEventArgs)"/> — 操作结束，宿主的编辑模式恢复由宿主照常处理。</item>
            </list>
            不参与手势时应返回 <c>false</c>，让宿主走默认行为（书写/选择/橡皮擦等）。
            </para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureStarting(System.Windows.Input.ManipulationStartingEventArgs)">
            <summary>操作即将开始。返回 <c>true</c> 表示插件接管该次操作。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureDelta(System.Windows.Input.ManipulationDeltaEventArgs)">
            <summary>操作增量。返回 <c>true</c> 表示插件已处理，宿主跳过默认变换。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginCanvasGestureHandler.OnCanvasGestureCompleted(System.Windows.Input.ManipulationCompletedEventArgs)">
            <summary>操作结束。宿主清理照常进行，这里只做插件自身的收尾。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPluginHost">
            <summary>
            宿主 API 入口。每个插件在 Initialize 阶段获得自己的宿主代理（<c>PluginHostProxy</c>）：
            日志写入该插件独立的日志目录，其余调用转发到宿主 <c>PluginManager</c>。
            所有注册动作（服务、工具栏项、IPC 处理器等）必须在 Initialize 阶段完成。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.Log(System.String)">
            <summary>
            写入普通日志。仅写入当前插件独立的日志文件（<c>PluginLogs/&lt;plugin-id&gt;/</c>），
            不落入宿主日志与主程序日志。
            </summary>
            <param name="message">日志消息。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.LogError(System.String,System.Exception)">
            <summary>
            写入错误日志，可附带异常。仅写入当前插件独立的日志文件，
            不落入宿主日志与主程序日志。
            </summary>
            <param name="message">错误描述。</param>
            <param name="ex">关联异常；可为 null。</param>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPluginHost.Services">
            <summary>
            依赖注入服务集合。插件可在 Initialize 阶段向此集合注册自己的服务。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPluginHost.ServiceProvider">
            <summary>
            依赖注入服务提供者。在所有插件 Initialize 完成后可用。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.GetService``1">
            <summary>
            从 DI 容器获取服务（兼容旧接口）。优先从 DI 容器解析，其次回退到旧注册字典。
            </summary>
            <typeparam name="T">服务类型。</typeparam>
            <returns>已注册的服务实例；未注册时返回 null。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.RegisterService``1(``0)">
            <summary>
            向 DI 容器注册服务（兼容旧接口，仅在 Initialize 阶段有效）。
            </summary>
            <typeparam name="T">服务类型。</typeparam>
            <param name="service">要注册的服务实例。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.RegisterToolbarItem(Ink_Canvas.Plugins.PluginToolbarItemInfo)">
            <summary>
            向浮动工具栏注册插件组件。
            </summary>
            <param name="itemInfo">要注册的工具栏组件信息。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.RegisterBoardToolbarItem(Ink_Canvas.Plugins.PluginToolbarItemInfo)">
            <summary>
            向白板工具栏注册插件组件。行为与 <see cref="M:Ink_Canvas.Plugins.IPluginHost.RegisterToolbarItem(Ink_Canvas.Plugins.PluginToolbarItemInfo)"/> 相同，仅目标工具栏不同。
            </summary>
            <param name="itemInfo">要注册的工具栏组件信息。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.RegisterIpcHandler(System.String,System.Func{System.Nullable{System.Text.Json.JsonElement},System.Object})">
            <summary>
            注册一个 IPC 方法处理函数，由插件调用。
            同一 <paramref name="method"/> 可注册多个处理函数，调用时第一个不抛异常的处理函数胜出。
            <paramref name="method"/> 为空字符串时宿主抛出 <see cref="T:System.ArgumentException"/>，
            <paramref name="handler"/> 为 null 时抛出 <see cref="T:System.ArgumentNullException"/>。
            </summary>
            <param name="method">方法名，不能为空。</param>
            <param name="handler">处理函数，接收 JSON 参数，返回任意可序列化对象（可为 null）。</param>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPluginHost.Ipc">
            <summary>
            获取当前的 IPC 总线实例。调用 <see cref="M:Ink_Canvas.Plugins.IPluginHost.RegisterIpcHandler(System.String,System.Func{System.Nullable{System.Text.Json.JsonElement},System.Object})"/> 或宿主启动 IPC 后可用，
            之前为 null。仅在 Initialize 之后使用。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginHost.EvaluateTrust(System.String,System.String,System.String)">
            <summary>
            根据文件路径评估即将安装的插件包的安全等级。
            <para>实现可参考 <see cref="!:PluginSecurityCheck"/>。</para>
            </summary>
            <param name="packagePath">安装包（.icpx）文件路径。</param>
            <param name="expectedSha256">预留参数，当前不参与信任判定（保留兼容）；传 null 即可。</param>
            <param name="declaredPluginId">插件声明 ID，用于与官方市场索引比对。</param>
            <returns>包含信任级别、权限声明与提示原因的安全评估结果。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPluginIpcBus">
            <summary>
            IPC 总线抽象。SDK 暴露接口，实现在主项目中。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginIpcBus.Start">
            <summary>
            启动命名管道服务端，循环接收客户端连接。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginIpcBus.RegisterHandler(System.String,System.Func{System.Nullable{System.Text.Json.JsonElement},System.Object})">
            <summary>
            注册一个方法处理函数。同一方法可注册多个，调用时第一个不抛异常的处理函数胜出。
            </summary>
            <param name="method">方法名，不能为空。</param>
            <param name="handler">处理函数。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginIpcBus.InvokeAsync(System.String,System.Nullable{System.Text.Json.JsonElement},System.Nullable{System.TimeSpan})">
            <summary>
            主动调用对端服务，<paramref name="args"/> 为任意 JSON 结构。
            失败时抛出 <see cref="T:System.InvalidOperationException"/>，超时抛出 <see cref="T:System.TimeoutException"/>。
            </summary>
            <param name="method">要调用的方法名。</param>
            <param name="args">调用参数（任意 JSON 结构）。</param>
            <param name="timeout">超时时间；默认 5 秒，必须为正。</param>
            <returns>对端返回的 JSON 结果；无结果时为 null。</returns>
        </member>
        <member name="E:Ink_Canvas.Plugins.IPluginIpcBus.MessageReceived">
            <summary>
            收到任何消息时触发。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginToolbarItemInfo">
            <summary>
            插件工具栏项信息，用于向主程序注册工具栏组件。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.Id">
            <summary>组件唯一标识（在目标工具栏内必须唯一，建议用反域名风格如 "com.example.tool"）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.DisplayName">
            <summary>组件在工具栏上显示的名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.Description">
            <summary>组件的描述文本，用于组件库与设置界面。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.IconGeometry">
            <summary>组件图标（SVG Path 几何数据字符串）。为空时使用默认图标。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.ViewFactory">
            <summary>创建组件视图（FrameworkElement）的工厂。返回 null 时该组件不显示。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.ApplyOrientation">
            <summary>工具栏横竖排切换时回调，用于让视图自适应方向。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.ApplySettings">
            <summary>把持久化的组件设置字典应用到视图。宿主在构建视图后调用。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.CustomSettings">
            <summary>声明式自定义设置列表，宿主据此在设置界面生成设置面板（ComboBox/Slider/Toggle）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.PopupContentFactory">
            <summary>
            弹窗内容工厂。若提供此属性，点击按钮时将自动打开包含此内容的弹窗菜单。
            返回的 FrameworkElement 将作为 Popup 的 Child 显示。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginToolbarSettingInfo">
            <summary>
            插件工具栏项的自定义设置描述。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.Key">
            <summary>设置项键名，用于持久化与 <see cref="P:Ink_Canvas.Plugins.PluginToolbarItemInfo.ApplySettings"/> 回调。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.DisplayName">
            <summary>设置项在设置界面显示的名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.Description">
            <summary>设置项的说明文本。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.Type">
            <summary>设置项类型（ComboBox/Slider/Toggle），决定宿主生成的控件。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.Options">
            <summary>ComboBox 选项的显示文本。未提供 <see cref="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.OptionValues"/> 时同时用作保存值。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.OptionValues">
            <summary>
            ComboBox 选项的保存值。若数量与 Options 一致，则 Options 用作显示文本、OptionValues 用作保存值；
            否则 Options 同时用作显示文本和保存值。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.DefaultValue">
            <summary>设置项默认值（字符串形式）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.MinValue">
            <summary>
            Slider 类型的最小值。默认 0。仅对 <see cref="F:Ink_Canvas.Plugins.PluginToolbarSettingType.Slider"/> 生效。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.MaxValue">
            <summary>
            Slider 类型的最大值。默认 100。仅对 <see cref="F:Ink_Canvas.Plugins.PluginToolbarSettingType.Slider"/> 生效。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.StepSize">
            <summary>
            Slider 类型的步长。设置后滑块吸附到该步长（含鼠标拖动/键盘/点击）。默认 1。
            仅对 <see cref="F:Ink_Canvas.Plugins.PluginToolbarSettingType.Slider"/> 生效。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginToolbarSettingType">
            <summary>
            插件工具栏设置项类型。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginToolbarSettingType.ComboBox">
            <summary>下拉选择框。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginToolbarSettingType.Slider">
            <summary>滑动条，配合 <see cref="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.MinValue"/> /
            <see cref="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.MaxValue"/> /
            <see cref="P:Ink_Canvas.Plugins.PluginToolbarSettingInfo.StepSize"/> 使用。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginToolbarSettingType.Toggle">
            <summary>开关。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IpcMessage">
            <summary>
            IPC 消息结构（JSON 透明传输）。宿主与插件共用。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.Id">
            <summary>消息标识（用于请求-响应关联）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.Method">
            <summary>方法名。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.Params">
            <summary>调用参数（任意 JSON 结构）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.Result">
            <summary>调用结果（任意 JSON 结构）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.Error">
            <summary>错误信息；非空表示调用失败。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.From">
            <summary>消息来源标识，当前实现中宿主发出的消息为 "host"。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcMessage.IsError">
            <summary>是否携带错误信息（<see cref="P:Ink_Canvas.Plugins.IpcMessage.Error"/> 非空）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IpcError">
            <summary>
            IPC 调用错误描述。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcError.Code">
            <summary>错误码。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IpcError.Message">
            <summary>错误描述文本。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginTrustLevel">
            <summary>
            插件来源信任度。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginTrustLevel.Unknown">
            <summary>未知来源（本地包/第三方镜像/SHA256 校验失败），建议安装前向用户明确确认。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginTrustLevel.Known">
            <summary>市场索引中存在但未提供 SHA256 校验值，无法核对文件完整性。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginTrustLevel.Trusted">
            <summary>官方插件市场索引中的条目且 SHA256 校验通过。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.SecurityVerdict">
            <summary>
            评估结果，用于安装前的安全提示。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.PackagePath">
            <summary>被评估安装包的文件路径。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.PluginId">
            <summary>插件 ID（调用方声明值，或从包内 manifest 解析）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.TrustLevel">
            <summary>评估得到的信任级别。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.PackageSha256">
            <summary>安装包实际计算出的 SHA256 校验值（十六进制小写）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.IsOnMarket">
            <summary>是否能在官方插件市场索引中找到该插件。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.Permissions">
            <summary>插件声明的权限列表（从包内 manifest 解析），用于安装前提示。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.Reasons">
            <summary>评估结论的说明/警示原因列表，用于安装前提示。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.SecurityVerdict.DetectedAt">
            <summary>评估时间（UTC）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPluginUriService">
            <summary>
            URI 服务：供插件注册深链接处理程序，或主动打开 <c>icc://</c> 深链接。
            <para>
            注册后，宿主会把形如 <c>icc://plugin/&lt;pluginId&gt;/&lt;path&gt;?&lt;query&gt;</c> 的深链接
            派发给对应插件注册的处理器。子路径按「/」分段做最长前缀匹配（忽略大小写），
            注册空字符串 <c>""</c> 表示接收该插件全部子路径。
            </para>
            <para>
            处理器与 <see cref="M:Ink_Canvas.Plugins.IPluginUriService.OpenUri(System.String)"/> 均在 UI 线程执行，可安全操作画布/窗口等宿主对象。
            </para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginUriService.RegisterHandler(System.String,System.Func{Ink_Canvas.Plugins.PluginUriRequest,System.Boolean})">
            <summary>
            注册 URI 处理程序。
            <para>
            注册后，<c>icc://plugin/&lt;本插件ID&gt;/&lt;subPath&gt;</c> 会调用 <paramref name="handler"/>。
            应在插件 <c>Initialize</c> 阶段调用（与 <see cref="M:Ink_Canvas.Plugins.IPluginHost.RegisterService``1(``0)"/> 约束一致）。
            </para>
            </summary>
            <param name="subPath">子路径（去 <c>plugin/&lt;id&gt;/</c> 前缀），空字符串表示接收全部子路径。</param>
            <param name="handler">处理器；返回 <c>true</c> 表示已处理，返回 <c>false</c> 时宿主记录「未处理」日志。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPluginUriService.OpenUri(System.String)">
            <summary>
            主动打开一个 <c>icc://</c> 深链接（应用命令或其它插件的 URI）。
            <para>受宿主设置「启用 URI 协议」控制：设置关闭时调用不生效。</para>
            </summary>
            <param name="uri">形如 <c>icc://settings/CanvasPage?key=xxx</c> 或 <c>icc://plugin/&lt;id&gt;/&lt;path&gt;</c>。</param>
            <returns>是否已受理（已进入路由，不代表命令一定成功）。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginUriRequest">
            <summary>
            插件 URI 请求。宿主解析 <c>icc://plugin/&lt;pluginId&gt;/&lt;path&gt;</c> 后构造，传递给注册的处理器。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUriRequest.PluginId">
            <summary>目标插件 ID（来自 URI，忽略大小写匹配）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUriRequest.Path">
            <summary>插件子路径（去除 <c>/plugin/&lt;id&gt;/</c> 前缀，小写）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUriRequest.Query">
            <summary>查询参数（键忽略大小写，值已 URL 解码）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUriRequest.RawUri">
            <summary>原始 URI 字符串。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPowerPointService">
            <summary>
            PowerPoint 控制服务，供插件操控 PPT 联动。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPowerPointService.IsSlideshowActive">
            <summary>
            PPT 是否正在放映。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPowerPointService.CurrentSlide">
            <summary>
            当前幻灯片页码（从 1 开始），未放映时返回 0。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPowerPointService.TotalSlides">
            <summary>
            幻灯片总数，未打开时返回 0。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPowerPointService.CurrentFileName">
            <summary>
            当前 PPT 文件名（不含路径），未打开时返回 null。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPowerPointService.IsConnected">
            <summary>
            是否已连接到 PowerPoint/WPS。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.GetPresentationPath">
            <summary>
            当前演示文件的完整路径；未打开时返回 null。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.GoToSlide(System.Int32)">
            <summary>
            跳转到指定页。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.NextSlide">
            <summary>
            下一页。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.PreviousSlide">
            <summary>
            上一页。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.StartSlideshow">
            <summary>
            开始放映。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.StopSlideshow">
            <summary>
            结束放映。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.ExportSlideThumbnails(System.Int32,System.Int32)">
            <summary>
            导出全部幻灯片缩略图（PNG）。
            </summary>
            <param name="width">缩略图宽度。</param>
            <param name="height">缩略图高度。</param>
            <returns>缩略图列表；未连接时返回空列表。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPowerPointService.TryShowSlideNavigation">
            <summary>
            尝试打开 PPT 翻页导航界面。返回是否成功打开。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IPowerPointService.SlideChanged">
            <summary>
            翻页事件（页码）。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IPowerPointService.SlideshowStarted">
            <summary>
            放映开始事件。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IPowerPointService.SlideshowEnded">
            <summary>
            放映结束事件。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginSlideThumbnail">
            <summary>
            单张幻灯片的缩略图（PNG 字节）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginSlideThumbnail.SlideNumber">
            <summary>幻灯片页码（从 1 开始）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginSlideThumbnail.PngBytes">
            <summary>缩略图 PNG 字节。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IPresentationSourceService">
            <summary>
            外部演示源服务：让插件把自己声明为一个「可翻页的演示文档」，
            复用宿主 PPT 放映模式的整套 UI（四个翻页条、工具栏放映布局、全屏处理）。
            <para>
            与 <see cref="T:Ink_Canvas.Plugins.IPowerPointService"/> 的区别：后者是遥控真实 PowerPoint，
            本服务是把插件自己的文档接进放映模式，翻页请求会回调到插件。
            </para>
            <para>
            典型用法（以 PDF 阅读器为例）：
            <list type="number">
            <item>打开文档并注入背景层后调用 <see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.BeginAsync(Ink_Canvas.Plugins.PresentationSourceDescriptor,System.Threading.CancellationToken)"/>，宿主进入放映模式并显示翻页条；</item>
            <item>宿主翻页条被点击时回调 <see cref="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.NavigateAsync"/>；</item>
            <item>插件自己翻页（滚轮、弹窗按钮）后调用 <see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.UpdatePageAsync(System.Int32,System.Int32,System.Threading.CancellationToken)"/> 同步页码；</item>
            <item>关闭文档时调用 <see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.EndAsync(System.String,System.Threading.CancellationToken)"/> 退出放映模式。</item>
            </list>
            </para>
            所有方法都可以从任意线程调用，宿主内部会切换到 UI 线程。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPresentationSourceService.IsActive">
            <summary>当前是否有插件正在以外部演示源身份占用放映模式。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPresentationSourceService.PageCount">
            <summary>当前外部演示源的页数；未激活时为 0。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IPresentationSourceService.CurrentPage">
            <summary>当前外部演示源的页码（从 1 开始）；未激活时为 0。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPresentationSourceService.BeginAsync(Ink_Canvas.Plugins.PresentationSourceDescriptor,System.Threading.CancellationToken)">
            <summary>
            进入放映模式。宿主会显示翻页条、切换工具栏为放映布局，并把翻页请求路由到
            <paramref name="descriptor"/> 提供的回调。
            <para>
            真实 PowerPoint 正在放映时调用会被拒绝（返回 <c>false</c>），避免两个演示源争抢同一套 UI。
            重复调用等价于先 <see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.EndAsync(System.String,System.Threading.CancellationToken)"/> 再重新开始。
            </para>
            </summary>
            <returns>成功进入放映模式返回 <c>true</c>。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPresentationSourceService.EndAsync(System.String,System.Threading.CancellationToken)">
            <summary>
            退出放映模式，隐藏翻页条并恢复工具栏布局。
            非本插件激活的演示源不受影响（内部按 <see cref="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.Id"/> 校验）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IPresentationSourceService.UpdatePageAsync(System.Int32,System.Int32,System.Threading.CancellationToken)">
            <summary>
            同步页码到所有翻页条。插件自己完成翻页后调用；
            由宿主翻页条触发的翻页无需调用，宿主会在回调返回后自动读取。
            </summary>
            <param name="currentPage">当前页码（从 1 开始）。</param>
            <param name="pageCount">总页数；传 0 表示沿用原值。</param>
        </member>
        <member name="E:Ink_Canvas.Plugins.IPresentationSourceService.Ended">
            <summary>外部演示源被宿主强制结束时触发（例如真实 PPT 开始放映、宿主退出）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PresentationNavigation">
            <summary>
            翻页方向。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PresentationNavigation.Previous">
            <summary>上一页。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PresentationNavigation.Next">
            <summary>下一页。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PresentationSourceDescriptor">
            <summary>
            外部演示源描述。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.Id">
            <summary>
            演示源唯一标识，建议用插件 Id。<see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.EndAsync(System.String,System.Threading.CancellationToken)"/>
            按此值校验，避免插件误关掉别人的放映。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.Name">
            <summary>显示名称，用于日志与提示。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.PageCount">
            <summary>总页数，必须大于 0，否则宿主不会显示翻页条。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.CurrentPage">
            <summary>起始页码（从 1 开始）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.NavigateAsync">
            <summary>
            翻页回调。宿主翻页条被点击（含长按连续翻页）时调用，插件完成渲染后返回新的页码
            （从 1 开始）；返回 0 或负数表示已到边界/翻页失败，宿主不更新页码。
            <para>
            返回值即宿主用来刷新翻页条的页码，插件无需再调用 <see cref="M:Ink_Canvas.Plugins.IPresentationSourceService.UpdatePageAsync(System.Int32,System.Int32,System.Threading.CancellationToken)"/>。
            </para>
            <para>回调在 UI 线程之外执行，插件内部若要触碰 WPF 元素需自行切回 Dispatcher。</para>
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PresentationSourceDescriptor.AllowPageNumberClick">
            <summary>
            是否允许点击页码按钮跳页。外部演示源通常没有缩略图与跳页对话框，
            置为 <c>false</c> 时宿主会禁用页码点击与增强预览。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IQuoteService">
            <summary>
            名言（鸡汤/一言）服务：供插件读取宿主内置的名言预设、触发白板水印名言刷新。
            <para>预设来源：osu 玩家语录、励志名言、高考祝福、Phigros Tips、一言（Hitokoto API）。</para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IQuoteService.GetPresetSchemes">
            <summary>列出宿主内置的名言预设方案。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IQuoteService.GetTipsFromPreset(System.String)">
            <summary>
            获取指定预设的全部语录数组。
            </summary>
            <param name="presetId">预设 ID（如 "osu"、"mottos"、"gaokao"、"phigros"）。</param>
            <returns>语录数组；hitokoto 或未知 ID 返回 null。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IQuoteService.RefreshAsync">
            <summary>触发宿主立即刷新白板水印名言（随机选取一条，异步）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginQuoteScheme">
            <summary>
            名言预设方案描述。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginQuoteScheme.PresetId">
            <summary>预设 ID，供 <see cref="M:Ink_Canvas.Plugins.IQuoteService.GetTipsFromPreset(System.String)"/> 使用。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginQuoteScheme.Name">
            <summary>预设显示名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginQuoteScheme.IsPreset">
            <summary>是否为内置预设（false 为自定义方案）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginQuoteScheme.IsEnabled">
            <summary>当前是否启用。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginRecognitionEngine">
            <summary>
            墨迹识别后端：自动 / IACore / WinRT。自动模式在 Windows 10 及以上默认 WinRT。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginRecognitionEngine.Auto">
            <summary>自动选择后端。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginRecognitionEngine.IACore">
            <summary>传统 IACore 识别（走 IPC 辅助进程）。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginRecognitionEngine.WinRT">
            <summary>Windows Runtime 识别。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginShapeRecognitionResult">
            <summary>
            与具体识别后端无关的形状识别结果。宿主识别到形状时，
            <see cref="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.StrokesToRemove"/> 指明应移除的原始笔画，插件可据此用标准形状替换。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.IsSuccess">
            <summary>是否识别成功。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.ShapeName">
            <summary>识别出的形状名，如 "Triangle"、"Circle"、"Rectangle"、"Arrow" 等。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.Centroid">
            <summary>形状中心点。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.HotPoints">
            <summary>形状关键点。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.ShapeWidth">
            <summary>形状宽度（DIP）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.ShapeHeight">
            <summary>形状高度（DIP）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.StrokesToRemove">
            <summary>识别为形状、应从画布移除的原始笔画。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginHandwritingWord">
            <summary>
            手写识别结果中的单个分词：候选文本与包围框。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHandwritingWord.TextCandidates">
            <summary>候选文本，按置信度降序。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHandwritingWord.BoundingRectangle">
            <summary>该词在画布上的包围框。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginHandwritingResult">
            <summary>一次手写识别批次的汇总结果。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHandwritingResult.IsSuccess">
            <summary>是否识别成功（有词结果）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHandwritingResult.CombinedText">
            <summary>全部词拼接后的文本。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginHandwritingResult.Words">
            <summary>分词列表。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IRecognitionService">
            <summary>
            墨迹识别服务：包装宿主的 WinRT / IACore 双引擎识别能力，
            供插件做手写转文字、图形识别/纠正与手写体美化。
            <para>识别引擎可能需要系统组件（Windows 10+ 手写识别或 IACore IPC 辅助进程），
            不可用时返回 <c>IsSuccess=false</c> 的结果，不会抛出异常。</para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IRecognitionService.RecognizeShapeAsync(System.Windows.Ink.StrokeCollection,Ink_Canvas.Plugins.PluginRecognitionEngine)">
            <summary>
            形状识别：把手写笔画识别为几何形状（三角形/圆/矩形/箭头等）。
            </summary>
            <param name="strokes">待识别的笔画。</param>
            <param name="engine">识别后端。</param>
            <returns>识别结果；失败时 <see cref="P:Ink_Canvas.Plugins.PluginShapeRecognitionResult.IsSuccess"/> 为 false。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IRecognitionService.RecognizeHandwritingAsync(System.Windows.Ink.StrokeCollection,Ink_Canvas.Plugins.PluginRecognitionEngine)">
            <summary>
            手写转文字识别，返回分词候选与包围框。
            </summary>
            <param name="strokes">待识别的笔画。</param>
            <param name="engine">识别后端（文字引擎跟随形状引擎选择）。</param>
            <returns>识别结果；失败时 <see cref="P:Ink_Canvas.Plugins.PluginHandwritingResult.IsSuccess"/> 为 false。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IRecognitionService.CorrectInkAsync(System.Windows.Ink.StrokeCollection,Ink_Canvas.Plugins.PluginRecognitionEngine,System.Boolean,System.String)">
            <summary>
            墨迹纠正（手写体美化）：识别成功后把原始笔画替换为手写风格字体的轮廓墨迹。
            </summary>
            <param name="strokes">待纠正的笔画。</param>
            <param name="engine">识别后端。</param>
            <param name="applyHandwritingBeautify">
            为 true 时用识别结果替换为手写风格字体轮廓墨迹；false 时原样返回。</param>
            <param name="handwritingFontFamilyList">
            逗号分隔的字体回退列表（WPF FontFamily）；null 时使用宿主内置默认。</param>
            <returns>纠正后的墨迹；识别失败或未启用美化时原样返回。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IRecognitionService.IsValidShapeType(System.String)">
            <summary>判断形状名是否为宿主支持的标准形状类型。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IRecognitionService.GetSystemInfo">
            <summary>当前识别引擎的系统信息（用于诊断/展示）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IScreenInfoService">
            <summary>
            屏幕信息服务：供插件读取系统显示器信息。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenInfoService.GetAllScreens">
            <summary>所有显示器的列表。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenInfoService.GetPrimaryScreen">
            <summary>主显示器。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenInfoService.HasMultipleScreens">
            <summary>是否存在多显示器。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginScreenInfo">
            <summary>
            显示器信息（只读）。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginScreenInfo.Bounds">
            <summary>显示器完整边界（设备无关像素，相对虚拟屏幕原点）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginScreenInfo.WorkingArea">
            <summary>显示器工作区（扣除任务栏等，设备无关像素）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginScreenInfo.DeviceName">
            <summary>显示器设备名（如 "\\.\DISPLAY1"）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginScreenInfo.IsPrimary">
            <summary>是否为主显示器。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IScreenshotService">
            <summary>
            截图服务：允许插件捕获全屏或指定区域的屏幕内容，返回位图或保存为文件。
            <para>所有方法都应在 UI 线程调用（宿主内部不做线程切换）。</para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenshotService.CaptureFullScreen">
            <summary>
            捕获整个虚拟屏幕（所有显示器）为位图。
            </summary>
            <returns>已 Freeze 的 <see cref="T:System.Windows.Media.Imaging.BitmapSource"/>，可直接用于 WPF 绑定/绘制。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenshotService.CaptureScreenArea(System.Int32,System.Int32,System.Int32,System.Int32)">
            <summary>
            捕获屏幕指定区域为位图。
            </summary>
            <param name="x">区域左上角 X（屏幕坐标）。</param>
            <param name="y">区域左上角 Y（屏幕坐标）。</param>
            <param name="width">区域宽度。</param>
            <param name="height">区域高度。</param>
            <returns>已 Freeze 的 <see cref="T:System.Windows.Media.Imaging.BitmapSource"/>。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IScreenshotService.SaveFullScreenToFile(System.String)">
            <summary>
            捕获整个虚拟屏幕并保存为 PNG 文件。
            </summary>
            <param name="filePath">输出 PNG 路径（目录需已存在）。</param>
            <returns>是否保存成功。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.ISettingsService">
            <summary>
            设置服务，供插件读写主程序设置。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ISettingsService.Get``1(System.String)">
            <summary>
            获取设置值。
            </summary>
            <param name="key">设置键，使用 "." 分隔层级，如 "appearance.theme"</param>
            <returns>设置值，不存在返回 default</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ISettingsService.Set``1(System.String,``0)">
            <summary>
            设置值。
            </summary>
            <param name="key">设置键</param>
            <param name="value">值</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.ISettingsService.Has(System.String)">
            <summary>
            检查设置键是否存在。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.ISettingsService.SettingChanged">
            <summary>
            设置变更时触发。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ISystemInfoService">
            <summary>
            系统信息服务：供插件读取宿主设备与系统信息。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ISystemInfoService.DeviceId">
            <summary>设备唯一 ID（用于诊断/上报）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ISystemInfoService.SystemVersion">
            <summary>Windows 系统版本描述。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ISystemInfoService.GetUsageStats">
            <summary>宿主使用统计（启动次数、累计时长等）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginUsageStats">
            <summary>
            宿主使用统计。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUsageStats.LaunchCount">
            <summary>累计启动次数。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUsageStats.TotalSeconds">
            <summary>累计使用时长（秒）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUsageStats.AvgSessionSeconds">
            <summary>平均单次会话时长（秒）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUsageStats.UpdatePriority">
            <summary>更新优先级（int 形式的宿主枚举）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginTheme">
            <summary>
            主题枚举。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginTheme.Light">
            <summary>浅色。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginTheme.Dark">
            <summary>深色。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IThemeService">
            <summary>
            主题服务：供插件检测系统/宿主当前主题，并把主题应用到自己的控件。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IThemeService.IsSystemThemeLight">
            <summary>系统当前是否为浅色主题（注册表 AppsUseLightTheme）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IThemeService.GetEffectiveTheme">
            <summary>宿主当前生效的主题（按宿主设置：浅色/深色/跟随系统）。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IThemeService.ApplyThemeToElement(System.Windows.FrameworkElement)">
            <summary>把宿主当前主题应用到指定元素（调用方需持有该元素在可视树中的引用）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.ITrayService">
            <summary>
            系统托盘服务：允许插件控制宿主托盘图标的显隐、主窗口的显隐、
            打开托盘右键菜单，以及向托盘右键菜单注入/移除自己的菜单项。
            <para>
            所有方法都可以从任意线程调用，宿主内部会切换到 UI 线程。
            注入的菜单项会插入到宿主固定菜单区（隐藏窗口/重启/关闭等）之间，
            不会破坏宿主菜单的动态状态更新。
            </para>
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ITrayService.IsIconVisible">
            <summary>
            托盘图标是否可见。写入时直接控制宿主托盘图标显隐；
            注意宿主自身有「启用托盘图标」设置（<c>Settings.Appearance.EnableTrayIcon</c>），
            宿主设置关闭时会再次隐藏图标，插件显隐只作为叠加控制。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.ITrayService.IsMainWindowVisible">
            <summary>
            主窗口是否可见（写入时同步托盘菜单里「隐藏主窗口」的勾选状态）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ITrayService.ShowContextMenu">
            <summary>打开托盘右键菜单。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.ITrayService.AddMenuItem(System.String,System.String,System.Action)">
            <summary>
            向托盘右键菜单注入一个菜单项，插入到宿主固定菜单区之间。
            </summary>
            <param name="id">菜单项唯一标识，用于后续移除/查重。</param>
            <param name="text">菜单项显示文本。</param>
            <param name="onClicked">点击回调（在 UI 线程触发）。</param>
            <returns>是否成功；<paramref name="id"/> 已存在或参数无效时返回 false。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ITrayService.RemoveMenuItem(System.String)">
            <summary>移除之前注入的托盘菜单项。</summary>
            <returns>是否移除成功。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.ITrayService.HasMenuItem(System.String)">
            <summary>检查指定 id 的托盘菜单项是否存在。</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.ITrayService.LeftClicked">
            <summary>托盘图标左键按下时触发（宿主按用户设置的左键行为执行默认动作后触发）。</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.ITrayService.RightClicked">
            <summary>托盘图标右键按下时触发（宿主按用户设置的右键行为执行默认动作后触发）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginUpdateChannel">
            <summary>
            更新通道。
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginUpdateChannel.Release">
            <summary>稳定版。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginUpdateChannel.Preview">
            <summary>预览版。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginUpdateChannel.Beta">
            <summary>Beta 版。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginUpdateCheckResult">
            <summary>
            更新检查结果。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUpdateCheckResult.RemoteVersion">
            <summary>远程最新版本号。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUpdateCheckResult.ReleaseNotes">
            <summary>发布说明（UpdateLog 文本）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginUpdateCheckResult.LineGroupName">
            <summary>命中的更新线路组名（用于后续下载/安装）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IUpdateService">
            <summary>
            更新服务：供插件检查宿主是否有新版本、读取更新日志、触发安装或取消下载。
            <para>底层复用宿主 <c>AutoUpdateHelper</c>，与软件内置的检查更新共用同一套更新源与校验。</para>
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IUpdateService.CheckForUpdatesAsync(Ink_Canvas.Plugins.PluginUpdateChannel)">
            <summary>
            检查指定通道是否有新版本。
            </summary>
            <param name="channel">更新通道。</param>
            <returns>检查结果；无新版本时 <see cref="P:Ink_Canvas.Plugins.PluginUpdateCheckResult.RemoteVersion"/> 为空。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.IUpdateService.GetUpdateLogAsync(Ink_Canvas.Plugins.PluginUpdateChannel)">
            <summary>
            获取指定通道的更新日志（UpdateLog 全文）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IUpdateService.InstallNewVersion(System.String,System.Boolean)">
            <summary>
            下载并安装指定版本（后台进行，宿主重启时应用更新）。
            </summary>
            <param name="version">要安装的版本号（来自 <see cref="M:Ink_Canvas.Plugins.IUpdateService.CheckForUpdatesAsync(Ink_Canvas.Plugins.PluginUpdateChannel)"/>）。</param>
            <param name="isInSilence">是否静默安装（无确认提示）。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.IUpdateService.RequestCancelDownload">
            <summary>取消正在进行的下载。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IUpdateService.LastDownloadFailure">
            <summary>最近一次下载失败的原因描述；无失败时为 null。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginWindowInfo">
            <summary>
            主程序窗口概览的插件安全视图。插件只能读取窗口元数据，不能操作目标窗口。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.Handle">
            <summary>窗口句柄（HWND）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.Title">
            <summary>窗口标题。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.ClassName">
            <summary>窗口类名。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.ProcessName">
            <summary>所属进程名（不含扩展名）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.ProcessPath">
            <summary>所属进程的可执行文件路径。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.IsVisible">
            <summary>窗口是否可见（当前快照仅包含可见且未最小化的窗口）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.IsMinimized">
            <summary>窗口是否最小化（当前快照仅包含可见且未最小化的窗口）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginWindowInfo.ProcessId">
            <summary>所属进程 ID。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IWindowOverviewService">
            <summary>
            提供主程序窗口读取模型的只读插件接口。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowOverviewService.Windows">
            <summary>当前窗口快照（只读）。仅包含可见且未最小化的窗口，宿主在窗口列表变化时自动刷新。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowOverviewService.ForegroundWindow">
            <summary>当前前台窗口。若前台窗口不在快照列表中（如已最小化、属于其他桌面）则为 null。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowOverviewService.Refresh">
            <summary>立即重新枚举窗口并触发 <see cref="E:Ink_Canvas.Plugins.IWindowOverviewService.WindowsChanged"/>。</summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IWindowOverviewService.WindowsChanged">
            <summary>窗口快照更新完成后触发。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.IWindowService">
            <summary>
            窗口控制服务，供插件操控主窗口状态。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowService.IsTopMost">
            <summary>窗口是否置顶</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowService.IsFullscreen">
            <summary>窗口是否全屏</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowService.IsCollapsed">
            <summary>窗口是否处于收纳（隐藏）状态</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.IWindowService.IsWhiteboardMode">
            <summary>当前是否处于白板模式</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.SetTopMost(System.Boolean)">
            <summary>
            设置窗口置顶状态。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.ToggleTopMost">
            <summary>
            切换置顶状态。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.Collapse">
            <summary>
            收纳浮动栏（隐藏到屏幕边缘）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.Expand">
            <summary>
            展开浮动栏。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.ToggleCollapse">
            <summary>
            切换收纳/展开。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.EnterWhiteboard">
            <summary>
            进入白板模式。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.ExitWhiteboard">
            <summary>
            退出白板模式（回到浮动栏）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.SetFullscreen(System.Boolean)">
            <summary>
            设置窗口全屏状态（进入/退出全屏）。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.IWindowService.ToggleFullscreen">
            <summary>
            切换窗口全屏状态。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IWindowService.TopMostChanged">
            <summary>
            窗口置顶状态变化事件。
            </summary>
        </member>
        <member name="E:Ink_Canvas.Plugins.IWindowService.CollapseChanged">
            <summary>
            收纳状态变化事件。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginBase">
            <summary>
            插件抽象基类。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Host">
            <summary>
            宿主 API 入口。在 Initialize 阶段由宿主注入，用于日志、服务注册/获取与工具栏注册。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Manifest">
            <summary>
            插件清单信息，从 manifest.json 加载。如果清单存在，则 Id/Name/Version 等属性优先从清单读取。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.PluginConfigFolder">
            <summary>
            插件配置目录路径
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.PluginFolder">
            <summary>
            插件所在目录路径
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Id">
            <summary>插件唯一标识，从 <see cref="P:Ink_Canvas.Plugins.PluginBase.Manifest"/> 读取；无清单时为空字符串。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Name">
            <summary>插件显示名称，从 <see cref="P:Ink_Canvas.Plugins.PluginBase.Manifest"/> 读取；无清单时为空字符串。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Version">
            <summary>插件版本号，从 <see cref="P:Ink_Canvas.Plugins.PluginBase.Manifest"/> 读取；无清单时为空字符串。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Description">
            <summary>插件描述，从 <see cref="P:Ink_Canvas.Plugins.PluginBase.Manifest"/> 读取；无清单时为空字符串。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Author">
            <summary>插件作者，从 <see cref="P:Ink_Canvas.Plugins.PluginBase.Manifest"/> 读取；无清单时为空字符串。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginBase.Order">
            <summary>插件列表排序（数值越小越靠前；实际加载顺序由依赖解析决定）。默认 0。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.Initialize(Ink_Canvas.Plugins.IPluginHost)">
            <summary>
            初始化插件（旧版签名，保持向后兼容）。
            新插件请使用 Initialize(IPluginHost, IServiceCollection) 重载。
            </summary>
            <param name="host">宿主 API 入口。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.Initialize(Ink_Canvas.Plugins.IPluginHost,Microsoft.Extensions.DependencyInjection.IServiceCollection)">
            <summary>
            初始化插件（新版签名，支持 DI 服务注册）。
            默认调用旧版 Initialize(host) 以保持兼容。
            新插件应重写此方法。
            </summary>
            <param name="host">宿主 API 入口。</param>
            <param name="services">依赖注入服务集合，插件可在此阶段注册服务。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.Ink_Canvas#Plugins#IPlugin#Initialize(Ink_Canvas.Plugins.IPluginHost)">
            <summary>
            IPlugin.Initialize 的显式实现，转发到新签名。
            </summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.Shutdown">
            <summary>卸载插件时调用，释放插件持有的资源。</summary>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.GetMainView">
            <summary>获取插件主视图控件（宿主在浮动栏/组件库中渲染）。返回 null 表示无主视图。</summary>
            <returns>主视图控件；null 表示无。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.GetSettingsView">
            <summary>获取插件设置视图控件（宿主在插件设置页中渲染）。返回 null 表示无设置视图。</summary>
            <returns>设置视图控件；null 表示无。</returns>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.Log(System.String)">
            <summary>记录普通日志（经宿主写入当前插件日志目录）。</summary>
            <param name="message">日志消息。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.LogError(System.String,System.Exception)">
            <summary>记录错误日志（经宿主写入当前插件日志目录）。</summary>
            <param name="message">错误描述。</param>
            <param name="ex">关联异常；可为 null。</param>
        </member>
        <member name="M:Ink_Canvas.Plugins.PluginBase.GetService``1">
            <summary>从宿主 DI 容器获取服务；未注册时返回 null。</summary>
            <typeparam name="T">服务类型。</typeparam>
            <returns>服务实例；未注册时返回 null。</returns>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginEntranceAttribute">
            <summary>
            标记插件入口类。PluginManager 会优先查找带有此特性的类作为插件入口。
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginInfo">
            <summary>
            插件运行时信息。宿主加载插件时创建，记录插件元数据与加载状态。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Id">
            <summary>插件唯一标识，如 "com.example.myplugin"。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Name">
            <summary>插件显示名称。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Version">
            <summary>插件版本号。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Description">
            <summary>插件描述。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Author">
            <summary>插件作者。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Order">
            <summary>插件列表排序（数值越小越靠前；实际加载顺序由依赖解析决定）。旧式 DLL 插件从插件实例读取，其余默认 0。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Instance">
            <summary>已创建的插件实例；初始化失败时也会保留，是否成功看 <see cref="P:Ink_Canvas.Plugins.PluginInfo.LoadStatus"/>。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.IsLoaded">
            <summary>实例是否已创建（Initialize 前即置 true，不代表初始化成功）。</summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Manifest">
            <summary>
            插件清单信息
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.PluginFolderPath">
            <summary>
            插件所在目录路径
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.PluginConfigFolder">
            <summary>
            插件配置目录路径
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.LoadStatus">
            <summary>
            插件加载状态
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginInfo.Exception">
            <summary>
            加载失败时的异常信息
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginLoadStatus">
            <summary>
            插件加载状态
            </summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginLoadStatus.NotLoaded">
            <summary>未加载。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginLoadStatus.Loaded">
            <summary>已加载成功。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginLoadStatus.Disabled">
            <summary>已禁用（用户禁用或加载被拦截）。</summary>
        </member>
        <member name="F:Ink_Canvas.Plugins.PluginLoadStatus.Error">
            <summary>加载失败（详见 <see cref="P:Ink_Canvas.Plugins.PluginInfo.Exception"/>）。</summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginManifest">
            <summary>
            插件清单元数据，从 manifest.json 文件加载。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Id">
            <summary>
            插件唯一标识符，例如 "com.example.myplugin"
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Name">
            <summary>
            插件显示名称
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Version">
            <summary>
            插件版本号，例如 "1.0.0"
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Description">
            <summary>
            插件描述
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Author">
            <summary>
            插件作者
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.EntranceAssembly">
            <summary>
            入口程序集文件名，例如 "MyPlugin.dll"
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.ApiVersion">
            <summary>
            目标 InkCanvas API 版本
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Icon">
            <summary>
            插件图标路径，默认为 "icon.png"
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Url">
            <summary>
            插件项目 URL
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.MinHostVersion">
            <summary>
            最低宿主版本要求，例如 "1.7.19"。宿主编译版本低于此值时拒绝加载本插件。
            留空表示不限制。比较对象为宿主实际编译版本
            （<see cref="F:Ink_Canvas.Plugins.HostApiRequirement.HostVersion"/>），不是某个固定下限。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.VersionRange">
            <summary>
            本插件要求的宿主版本范围，例如 "^1.7.0"、">=1.7.18,&lt;2.0.0"。留空表示不限制。
            与 <see cref="P:Ink_Canvas.Plugins.PluginManifest.MinHostVersion"/> 的区别是这里可以同时表达上界，
            用于插件明确知道自己在某个大版本之后会失效的场景；两者都填时需同时满足。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Permissions">
            <summary>
            插件申请的权限列表，例如 "Settings", "Hotkeys", "Network", "FileSystem"。
            主机在加载插件时可向用户提示。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.License">
            <summary>
            许可协议，例如 "MIT"、"Apache-2.0"。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Tags">
            <summary>
            标签列表。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.SourceUrl">
            <summary>
            源码仓库 URL。
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginManifest.Dependencies">
            <summary>
            插件依赖列表
            </summary>
        </member>
        <member name="T:Ink_Canvas.Plugins.PluginDependency">
            <summary>
            插件依赖描述
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginDependency.Id">
            <summary>
            依赖的插件 ID
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginDependency.Version">
            <summary>
            依赖的最低版本
            </summary>
        </member>
        <member name="P:Ink_Canvas.Plugins.PluginDependency.IsRequired">
            <summary>
            是否为必需依赖
            </summary>
        </member>
    </members>
</doc>
