/* * ImportInkMenuItem.cs * "导入墨迹" 菜单项 * 所属项目:Better-Seewo * 作者:雾启工作室 * * 说明: * 实现白板编辑菜单中的"导入墨迹"功能。 * 点击后打开文件选择对话框,选择 .ink.json 文件导入到当前白板。 * 默认文件名为"课件墨迹.ink.json"。 */ using System; using System.IO; using System.Threading.Tasks; using System.Windows; using dotnetCampus.EasiPlugin; using Newtonsoft.Json; namespace Better_Seewo.Better_EN5.UI { /// /// 导入墨迹菜单项 /// 实现 IMenuPluginItem 接口,在白板编辑菜单中显示"导入墨迹"按钮 /// 点击后打开文件选择对话框,读取 JSON 文件并将墨迹数据应用到白板 /// public class ImportInkMenuItem : IMenuPluginItem { /// /// 菜单项唯一标识符 /// public Guid Id { get; } = new Guid("B2C3D4E5-F6A7-8901-BCDE-F12345678901"); /// /// 菜单项显示标题 /// 根据当前语言环境显示"导入墨迹"或"Import Ink" /// public string Title { get; } /// /// 菜单项排序提示值 /// 值越大越靠前,997 表示在菜单中位于"导出墨迹"之后 /// public int SortHint { get; } = 997; /// /// 语言资源源,用于获取多语言文本 /// private readonly DictionaryLanguageSource _languageSource; /// /// 构造函数 /// /// 中英文双语资源字典 public ImportInkMenuItem(DictionaryLanguageSource languageSource) { _languageSource = languageSource; // 从语言资源中获取菜单项标题,默认中文 Title = _languageSource.GetString("ImportInk.Title") ?? "导入墨迹"; } /// /// 获取菜单项图标 /// 返回菜单项在工具栏中显示的图标资源路径 /// /// 图标资源路径字符串 public string GetMenuIcon() { // 返回导入图标路径 return "pack://application:,,,/Better-EN5;component/Resources/import_icon.png"; } /// /// 菜单项点击事件处理 /// 打开文件选择对话框,读取 .ink.json 文件并将墨迹数据导入到当前白板 /// public async Task OnClickAsync() { await Task.Run(() => { // 创建文件选择对话框 var openFileDialog = new Microsoft.Win32.OpenFileDialog { // 默认文件名 FileName = "课件墨迹.ink.json", // 文件过滤器 Filter = "墨迹 JSON 文件 (*.ink.json)|*.ink.json|所有文件 (*.*)|*.*", // 默认扩展名 DefaultExt = ".ink.json", // 对话框标题 Title = "导入墨迹", }; // 显示打开对话框 if (openFileDialog.ShowDialog() == true) { try { // 读取 JSON 文件内容 string json = File.ReadAllText(openFileDialog.FileName); // 使用 Newtonsoft.Json 反序列化墨迹数据 var inkData = JsonConvert.DeserializeObject(json); if (inkData == null) { MessageBox.Show("无法解析所选文件的墨迹数据。", "导入失败", MessageBoxButton.OK, MessageBoxImage.Warning); return; } // 将墨迹数据应用到白板 InkDataHelper.ImportInkData(inkData); } catch (Exception ex) { // 捕获并提示导入过程中的异常 MessageBox.Show($"导入墨迹时发生错误:\n{ex.Message}", "导入失败", MessageBoxButton.OK, MessageBoxImage.Error); } } }); } } }