diff --git a/Ink Canvas/Helpers/DeviceIdentifier.cs b/Ink Canvas/Helpers/DeviceIdentifier.cs index 04736514..650211db 100644 --- a/Ink Canvas/Helpers/DeviceIdentifier.cs +++ b/Ink Canvas/Helpers/DeviceIdentifier.cs @@ -1512,14 +1512,14 @@ namespace Ink_Canvas.Helpers { try { - LogHelper.WriteLogToFile("DeviceIdentifier | 开始关机时保存使用时间数据", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("DeviceIdentifier | 开始关机时保存使用时间数据"); // 1. 加载现有使用统计数据 var stats = LoadUsageStats(); if (stats == null) { stats = new UsageStats { DeviceId = DeviceId }; - LogHelper.WriteLogToFile("DeviceIdentifier | 创建新的使用统计数据", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("DeviceIdentifier | 创建新的使用统计数据"); } // 2. 计算本次会话时长(防止异常值) @@ -1542,7 +1542,7 @@ namespace Ink_Canvas.Helpers // 4. 保存数据 SaveUsageStats(stats); - LogHelper.WriteLogToFile("DeviceIdentifier | 关机保存完成", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("DeviceIdentifier | 关机保存完成"); } catch (Exception ex) { diff --git a/Ink Canvas/Helpers/GlobalHotkeyManager.cs b/Ink Canvas/Helpers/GlobalHotkeyManager.cs index dd90ddf7..efa21461 100644 --- a/Ink Canvas/Helpers/GlobalHotkeyManager.cs +++ b/Ink Canvas/Helpers/GlobalHotkeyManager.cs @@ -175,7 +175,7 @@ namespace Ink_Canvas.Helpers { if (!File.Exists(HotkeyConfigFile)) { - LogHelper.WriteLogToFile("快捷键配置文件不存在", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("快捷键配置文件不存在"); return new List(); } @@ -208,7 +208,7 @@ namespace Ink_Canvas.Helpers }); } - LogHelper.WriteLogToFile($"从配置文件读取到 {hotkeyList.Count} 个快捷键信息", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"从配置文件读取到 {hotkeyList.Count} 个快捷键信息"); return hotkeyList; } catch (Exception ex) @@ -284,14 +284,14 @@ namespace Ink_Canvas.Helpers { // 成功从配置文件加载快捷键设置 _hotkeysShouldBeRegistered = true; - LogHelper.WriteLogToFile("成功从配置文件加载快捷键设置", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("成功从配置文件加载快捷键设置"); } else { // 如果配置文件不存在或加载失败,使用默认快捷键 if (!File.Exists(HotkeyConfigFile)) { - LogHelper.WriteLogToFile("配置文件不存在,注册默认快捷键", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("配置文件不存在,注册默认快捷键"); RegisterDefaultHotkeys(); _hotkeysShouldBeRegistered = true; } @@ -345,14 +345,14 @@ namespace Ink_Canvas.Helpers if (!_hotkeysShouldBeRegistered) { _hotkeysShouldBeRegistered = true; - LogHelper.WriteLogToFile("启用快捷键注册功能", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("启用快捷键注册功能"); // 立即加载快捷键设置 LoadHotkeysFromSettings(); } else { - LogHelper.WriteLogToFile("快捷键注册功能已经启用,重新加载快捷键设置", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("快捷键注册功能已经启用,重新加载快捷键设置"); // 即使已经启用,也要重新加载快捷键设置以确保快捷键正常工作 LoadHotkeysFromSettings(); } @@ -374,14 +374,14 @@ namespace Ink_Canvas.Helpers if (_hotkeysShouldBeRegistered) { _hotkeysShouldBeRegistered = false; - LogHelper.WriteLogToFile("禁用快捷键注册功能", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("禁用快捷键注册功能"); // 注销所有快捷键 UnregisterAllHotkeys(); } else { - LogHelper.WriteLogToFile("快捷键注册功能已经禁用", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("快捷键注册功能已经禁用"); } } catch (Exception ex) @@ -403,13 +403,13 @@ namespace Ink_Canvas.Helpers { // 鼠标模式下禁用快捷键,让键盘操作放行 DisableHotkeyRegistration(); - LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("切换到鼠标模式,禁用快捷键以放行键盘操作"); } else { // 非鼠标模式下启用快捷键 EnableHotkeyRegistration(); - LogHelper.WriteLogToFile("切换到非鼠标模式,启用快捷键", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("切换到非鼠标模式,启用快捷键"); } } catch (Exception ex) diff --git a/Ink Canvas/Helpers/InkFadeManager.cs b/Ink Canvas/Helpers/InkFadeManager.cs index febc4662..b28b9eb4 100644 --- a/Ink Canvas/Helpers/InkFadeManager.cs +++ b/Ink Canvas/Helpers/InkFadeManager.cs @@ -258,7 +258,7 @@ namespace Ink_Canvas.Helpers public void Enable() { IsEnabled = true; - LogHelper.WriteLogToFile("墨迹渐隐功能已启用", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("墨迹渐隐功能已启用"); } /// @@ -267,7 +267,7 @@ namespace Ink_Canvas.Helpers public void Disable() { IsEnabled = false; - LogHelper.WriteLogToFile("墨迹渐隐功能已禁用", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("墨迹渐隐功能已禁用"); } #endregion diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs index cbfb5a81..66f7a672 100644 --- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs @@ -748,19 +748,30 @@ namespace Ink_Canvas InkCanvas.SetLeft(clonedImage, InkCanvas.GetLeft(image) + 20); InkCanvas.SetTop(clonedImage, InkCanvas.GetTop(image) + 20); + // 设置图片属性,避免被InkCanvas选择系统处理 + clonedImage.IsHitTestVisible = true; + clonedImage.Focusable = false; + + // 初始化变换 + InitializeElementTransform(clonedImage); + + // 绑定事件 + BindElementEvents(clonedImage); + // 添加到画布 inkCanvas.Children.Add(clonedImage); // 提交到时间机器以支持撤销 timeMachine.CommitElementInsertHistory(clonedImage); + + return clonedImage; } catch (Exception ex) { // 记录错误但不中断程序 - System.Diagnostics.Debug.WriteLine($"克隆图片时发生错误: {ex.Message}"); + LogHelper.WriteLogToFile($"克隆图片时发生错误: {ex.Message}", LogHelper.LogType.Error); + return null; } - - return null; } /// @@ -1064,23 +1075,32 @@ namespace Ink_Canvas { if (currentSelectedElement is Image originalImage) { - // 创建克隆图片 - Image clonedImage = CloneImage(originalImage); + // 创建新页面 + BtnWhiteBoardAdd_Click(null, null); - // 这里可以添加切换到新页面的逻辑 - // 暂时先添加到当前页面 - inkCanvas.Children.Add(clonedImage); + // 创建克隆图片(不添加到当前画布,因为已经创建了新页面) + Image clonedImage = CreateClonedImage(originalImage); - // 初始化变换 - InitializeElementTransform(clonedImage); - - // 绑定事件 - BindElementEvents(clonedImage); - - // 记录历史 - timeMachine.CommitElementInsertHistory(clonedImage); - - LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}"); + if (clonedImage != null) + { + // 设置图片属性,避免被InkCanvas选择系统处理 + clonedImage.IsHitTestVisible = true; + clonedImage.Focusable = false; + + // 初始化变换 + InitializeElementTransform(clonedImage); + + // 绑定事件 + BindElementEvents(clonedImage); + + // 添加到新页面的画布 + inkCanvas.Children.Add(clonedImage); + + // 记录历史 + timeMachine.CommitElementInsertHistory(clonedImage); + + LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}"); + } } } catch (Exception ex) @@ -1185,7 +1205,7 @@ namespace Ink_Canvas } } - // 克隆图片的辅助方法 + // 克隆图片的辅助方法(只创建图片,不添加到画布) private Image CreateClonedImage(Image originalImage) { try @@ -1204,7 +1224,7 @@ namespace Ink_Canvas clonedImage.Stretch = originalImage.Stretch; clonedImage.StretchDirection = originalImage.StretchDirection; - // 复制位置 + // 复制位置(在新页面中居中显示) double left = InkCanvas.GetLeft(originalImage); double top = InkCanvas.GetTop(originalImage); InkCanvas.SetLeft(clonedImage, left + 20); // 稍微偏移位置 diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index ff1b66d6..0754132c 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -2077,9 +2077,9 @@ namespace Ink_Canvas { highlighterColor = 100; // 黑色荧光笔 } - else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8), 15) || - IsColorSimilar(color, Color.FromRgb(250, 204, 21), 15) || - IsColorSimilar(color, Color.FromRgb(253, 224, 71), 15)) + else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8)) || + IsColorSimilar(color, Color.FromRgb(250, 204, 21)) || + IsColorSimilar(color, Color.FromRgb(253, 224, 71))) { highlighterColor = 103; // 黄色荧光笔 } @@ -2094,12 +2094,12 @@ namespace Ink_Canvas { highlighterColor = 106; // 蓝色荧光笔 } - else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38), 15) || - IsColorSimilar(color, Color.FromRgb(239, 68, 68), 15)) + else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38)) || + IsColorSimilar(color, Color.FromRgb(239, 68, 68))) { highlighterColor = 102; // 红色荧光笔 } - else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74), 15)) + else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74))) { highlighterColor = 104; // 绿色荧光笔 } diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 9c1a8393..a36e7a47 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -162,13 +162,13 @@ namespace Ink_Canvas return; } - LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}"); // 新增:根据是否为笔尾自动切换橡皮擦/画笔模式 if (e.StylusDevice.Inverted) { inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; - LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint"); } else { @@ -177,18 +177,18 @@ namespace Ink_Canvas { // 确保几何绘制模式下不切换到Ink模式,避免触摸轨迹被收集 inkCanvas.EditingMode = InkCanvasEditingMode.None; - LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None"); return; } // 修复:保持当前的线擦模式,不要强制切换到Ink模式 if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke) { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; - LogHelper.WriteLogToFile("设置 EditingMode 为 Ink", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("设置 EditingMode 为 Ink"); } else { - LogHelper.WriteLogToFile("保持当前线擦模式", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("保持当前线擦模式"); } } SetCursorBasedOnEditingMode(inkCanvas); @@ -230,14 +230,14 @@ namespace Ink_Canvas { try { - LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}"); var stroke = GetStrokeVisual(e.StylusDevice.Id).Stroke; - LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}"); // 正常模式:添加到画布并参与墨迹纠正 // 墨迹渐隐功能现在在 StrokeCollected 事件中统一处理所有输入方式 - LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布"); inkCanvas.Strokes.Add(stroke); await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁 @@ -528,7 +528,7 @@ namespace Ink_Canvas StartPalmEraserRecoveryTimer(); // 记录日志 - LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}"); } } @@ -623,7 +623,7 @@ namespace Ink_Canvas break; } - LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}"); } } catch (Exception ex) @@ -648,7 +648,7 @@ namespace Ink_Canvas ViewboxFloatingBar.IsHitTestVisible = true; BlackboardUIGridForInkReplay.IsHitTestVisible = true; - LogHelper.WriteLogToFile("Palm eraser state reset completed", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("Palm eraser state reset completed"); } // 新增:超时检测 - 如果手掌擦激活时间过长,强制重置状态 @@ -697,7 +697,7 @@ namespace Ink_Canvas // 停止恢复定时器 StopPalmEraserRecoveryTimer(); - LogHelper.WriteLogToFile("Palm eraser timeout recovery completed", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("Palm eraser timeout recovery completed"); } } // 修复:几何绘制模式下,触摸抬手时应该正确处理,而不是简单模拟鼠标事件 @@ -1033,7 +1033,7 @@ namespace Ink_Canvas break; } - LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}"); } } catch (Exception ex) @@ -1055,7 +1055,7 @@ namespace Ink_Canvas // 停止定时器 StopPalmEraserRecoveryTimer(); - LogHelper.WriteLogToFile("Palm eraser timer recovery completed", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("Palm eraser timer recovery completed"); } } } diff --git a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs index ea00e278..14ca4c9c 100644 --- a/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs +++ b/Ink Canvas/Windows/HotkeySettingsWindow.xaml.cs @@ -57,7 +57,7 @@ namespace Ink_Canvas.Windows { try { - LogHelper.WriteLogToFile("开始初始化快捷键项", LogHelper.LogType.Info); + LogHelper.WriteLogToFile("开始初始化快捷键项"); // 初始化快捷键项并设置HotkeyName _hotkeyItems["Undo"] = UndoHotkey; @@ -114,7 +114,7 @@ namespace Ink_Canvas.Windows _hotkeyItems["Exit"] = ExitHotkey; ExitHotkey.HotkeyName = "Exit"; - LogHelper.WriteLogToFile($"成功初始化 {_hotkeyItems.Count} 个快捷键项", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"成功初始化 {_hotkeyItems.Count} 个快捷键项"); } catch (Exception ex) { @@ -128,7 +128,7 @@ namespace Ink_Canvas.Windows { // 首先尝试从配置文件获取快捷键信息 var configHotkeys = _hotkeyManager.GetHotkeysFromConfigFile(); - LogHelper.WriteLogToFile($"配置文件中的快捷键数量: {configHotkeys.Count}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"配置文件中的快捷键数量: {configHotkeys.Count}"); // 显示配置文件中的快捷键 foreach (var hotkey in configHotkeys) @@ -136,7 +136,7 @@ namespace Ink_Canvas.Windows if (_hotkeyItems.TryGetValue(hotkey.Name, out var hotkeyItem)) { hotkeyItem.SetCurrentHotkey(hotkey.Key, hotkey.Modifiers); - LogHelper.WriteLogToFile($"从配置文件设置快捷键项: {hotkey.Name} -> {hotkey.Modifiers}+{hotkey.Key}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"从配置文件设置快捷键项: {hotkey.Name} -> {hotkey.Modifiers}+{hotkey.Key}"); } } @@ -148,7 +148,7 @@ namespace Ink_Canvas.Windows { // 根据DefaultKey和DefaultModifiers设置默认显示值 SetDefaultHotkeyForItem(hotkeyItem); - LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"设置默认显示值: {hotkeyItem.HotkeyName}"); } } } @@ -243,7 +243,7 @@ namespace Ink_Canvas.Windows { try { - LogHelper.WriteLogToFile($"收到快捷键变更事件: {e.HotkeyName} -> {e.Modifiers}+{e.Key}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"收到快捷键变更事件: {e.HotkeyName} -> {e.Modifiers}+{e.Key}"); // 检查快捷键冲突 if (IsHotkeyConflict(e.Key, e.Modifiers, e.HotkeyName)) @@ -305,30 +305,30 @@ namespace Ink_Canvas.Windows { try { - LogHelper.WriteLogToFile($"开始更新快捷键: {hotkeyName} -> {modifiers}+{key}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"开始更新快捷键: {hotkeyName} -> {modifiers}+{key}"); // 先注销原有的快捷键(如果存在) _hotkeyManager.UnregisterHotkey(hotkeyName); - LogHelper.WriteLogToFile($"已注销原有快捷键: {hotkeyName}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"已注销原有快捷键: {hotkeyName}"); // 根据快捷键名称获取对应的动作 var action = GetActionForHotkey(hotkeyName); if (action != null) { - LogHelper.WriteLogToFile($"找到快捷键动作: {hotkeyName}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"找到快捷键动作: {hotkeyName}"); // 直接注册新的快捷键 if (_hotkeyManager.RegisterHotkey(hotkeyName, key, modifiers, action)) { - LogHelper.WriteLogToFile($"成功注册新快捷键: {hotkeyName} -> {modifiers}+{key}", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"成功注册新快捷键: {hotkeyName} -> {modifiers}+{key}"); // 立即保存到配置文件 _hotkeyManager.SaveHotkeysToSettings(); - LogHelper.WriteLogToFile($"已保存快捷键配置", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"已保存快捷键配置"); // 更新UI显示 LoadCurrentHotkeys(); - LogHelper.WriteLogToFile($"已更新UI显示", LogHelper.LogType.Info); + LogHelper.WriteLogToFile($"已更新UI显示"); LogHelper.WriteLogToFile($"快捷键 {hotkeyName} 已更新为 {modifiers}+{key} 并保存", LogHelper.LogType.Event); }