From 7f88d9ae2723e2995c630faa7e92581587248709 Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Tue, 29 Jul 2025 17:44:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=9B=BE=E7=89=87=E5=A2=A8=E8=BF=B9?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/MainWindow_cs/MW_BoardControls.cs | 46 +++---------------- .../MainWindow_cs/MW_ElementsControls.cs | 1 - .../MainWindow_cs/MW_SelectionGestures.cs | 10 ---- Ink Canvas/MainWindow_cs/MW_TimeMachine.cs | 23 +--------- 4 files changed, 9 insertions(+), 71 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs index 0fde1b60..de356541 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs @@ -46,14 +46,10 @@ namespace Ink_Canvas { if (!elementsInHistory.Contains(child)) { timeMachine.CommitElementInsertHistory(child); missingElements++; - LogHelper.WriteLogToFile($"SaveStrokes: 补充保存遗漏的UI元素 {child.GetType().Name}", LogHelper.LogType.Trace); } } } - - if (missingElements > 0) { - LogHelper.WriteLogToFile($"SaveStrokes: 总共补充保存了 {missingElements} 个遗漏的UI元素", LogHelper.LogType.Trace); - } + // 确保画布上的所有墨迹都被保存 if (inkCanvas.Strokes.Count > 0) { @@ -81,7 +77,6 @@ namespace Ink_Canvas { if (missingStrokes.Count > 0) { timeMachine.CommitStrokeUserInputHistory(missingStrokes); - LogHelper.WriteLogToFile($"SaveStrokes: 补充保存了 {missingStrokes.Count} 个遗漏的墨迹", LogHelper.LogType.Trace); } } @@ -90,25 +85,13 @@ namespace Ink_Canvas { TimeMachineHistories[0] = timeMachineHistory; timeMachine.ClearStrokeHistory(); - // 调试信息 - var elementCount = timeMachineHistory?.Count(h => h.CommitType == TimeMachineHistoryType.ElementInsert && !h.StrokeHasBeenCleared) ?? 0; - var strokeHistoryCount = timeMachineHistory?.Count(h => h.CommitType == TimeMachineHistoryType.UserInput && !h.StrokeHasBeenCleared) ?? 0; - var currentCanvasElements = inkCanvas.Children.Count; - var currentCanvasStrokes = inkCanvas.Strokes.Count; - var selectedElement = selectedUIElement?.GetType().Name ?? "无"; - LogHelper.WriteLogToFile($"SaveStrokes(备份主页面): 保存了 {elementCount} 个UI元素, {strokeHistoryCount} 个墨迹历史, 当前画布有 {currentCanvasElements} 个元素, {currentCanvasStrokes} 个墨迹, 选中元素: {selectedElement}", LogHelper.LogType.Trace); + } else { var timeMachineHistory = timeMachine.ExportTimeMachineHistory(); TimeMachineHistories[CurrentWhiteboardIndex] = timeMachineHistory; timeMachine.ClearStrokeHistory(); - // 调试信息 - var elementCount = timeMachineHistory?.Count(h => h.CommitType == TimeMachineHistoryType.ElementInsert && !h.StrokeHasBeenCleared) ?? 0; - var strokeHistoryCount = timeMachineHistory?.Count(h => h.CommitType == TimeMachineHistoryType.UserInput && !h.StrokeHasBeenCleared) ?? 0; - var currentCanvasElements = inkCanvas.Children.Count; - var currentCanvasStrokes = inkCanvas.Strokes.Count; - var selectedElement = selectedUIElement?.GetType().Name ?? "无"; - LogHelper.WriteLogToFile($"SaveStrokes(页面{CurrentWhiteboardIndex}): 保存了 {elementCount} 个UI元素, {strokeHistoryCount} 个墨迹历史, 当前画布有 {currentCanvasElements} 个元素, {currentCanvasStrokes} 个墨迹, 选中元素: {selectedElement}", LogHelper.LogType.Trace); + } } @@ -134,26 +117,16 @@ namespace Ink_Canvas { // 先清空当前画布的墨迹 inkCanvas.Strokes.Clear(); - // 保存当前的UI元素,稍后会被ApplyHistoryToCanvas正确处理 - var currentElements = new List(); - for (int i = inkCanvas.Children.Count - 1; i >= 0; i--) - { - currentElements.Add(inkCanvas.Children[i]); - } + // 清空当前画布的所有内容(墨迹和图片) + // 这里必须清除图片,因为页面切换时需要完全重置画布状态 inkCanvas.Children.Clear(); - LogHelper.WriteLogToFile($"RestoreStrokes: 清空了 {currentElements.Count} 个当前UI元素", LogHelper.LogType.Trace); // 如果历史记录为空,直接返回(新页面或空页面) if (TimeMachineHistories[targetIndex] == null) { timeMachine.ClearStrokeHistory(); - LogHelper.WriteLogToFile($"RestoreStrokes({(isBackupMain ? "备份主页面" : $"页面{CurrentWhiteboardIndex}")}): 历史记录为空", LogHelper.LogType.Trace); return; } - var targetHistory = TimeMachineHistories[targetIndex]; - var elementCount = targetHistory?.Count(h => h.CommitType == TimeMachineHistoryType.ElementInsert && !h.StrokeHasBeenCleared) ?? 0; - LogHelper.WriteLogToFile($"RestoreStrokes({(isBackupMain ? "备份主页面" : $"页面{CurrentWhiteboardIndex}")}): 准备恢复 {elementCount} 个UI元素", LogHelper.LogType.Trace); - if (isBackupMain) { timeMachine.ImportTimeMachineHistory(TimeMachineHistories[0]); foreach (var item in TimeMachineHistories[0]) ApplyHistoryToCanvas(item); @@ -163,18 +136,13 @@ namespace Ink_Canvas { foreach (var item in TimeMachineHistories[CurrentWhiteboardIndex]) ApplyHistoryToCanvas(item); } - // 恢复后检查实际的UI元素数量 - var actualElementCount = inkCanvas.Children.Count; - LogHelper.WriteLogToFile($"RestoreStrokes({(isBackupMain ? "备份主页面" : $"页面{CurrentWhiteboardIndex}")}): 实际恢复了 {actualElementCount} 个UI元素", LogHelper.LogType.Trace); - // 确保选中状态被清除,因为我们切换了页面 if (selectedUIElement != null) { DeselectUIElement(); - LogHelper.WriteLogToFile($"RestoreStrokes: 清除了选中状态", LogHelper.LogType.Trace); } } - catch (Exception ex) { - LogHelper.WriteLogToFile($"RestoreStrokes失败: {ex.Message}", LogHelper.LogType.Error); + catch { + // ignored } } diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs index acdeeeef..1c06148a 100644 --- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs @@ -40,7 +40,6 @@ namespace Ink_Canvas image.IsManipulationEnabled = true; timeMachine.CommitElementInsertHistory(image); - LogHelper.WriteLogToFile($"图片插入: {image.Name}, 当前画布UI元素数量: {inkCanvas.Children.Count}", LogHelper.LogType.Trace); } } } diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index 33cd8fdf..6e7042fb 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -588,7 +588,6 @@ namespace Ink_Canvas { } selectedUIElement = element; - LogHelper.WriteLogToFile($"SelectUIElement: 设置选中元素为 {element?.GetType().Name ?? "null"}", LogHelper.LogType.Trace); if (element != null) { @@ -602,13 +601,11 @@ namespace Ink_Canvas { if (element is Image) { ShowImageToolbar(); - LogHelper.WriteLogToFile($"SelectUIElement: 显示图片工具栏", LogHelper.LogType.Trace); } else { // 对于其他UI元素,显示拖拽手柄 ShowResizeHandles(); - LogHelper.WriteLogToFile($"SelectUIElement: 显示拖拽手柄", LogHelper.LogType.Trace); } } } @@ -871,8 +868,6 @@ namespace Ink_Canvas { private void UIElement_MouseDown(object sender, MouseButtonEventArgs e) { - LogHelper.WriteLogToFile($"UIElement_MouseDown: 编辑模式={inkCanvas.EditingMode}, 元素类型={sender.GetType().Name}", LogHelper.LogType.Trace); - if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) { var element = sender as UIElement; @@ -881,14 +876,9 @@ namespace Ink_Canvas { // 切换到选择模式并选择这个元素 inkCanvas.Select(new[] { element }); SelectUIElement(element); - LogHelper.WriteLogToFile($"UIElement_MouseDown: 选择了UI元素 {element.GetType().Name}", LogHelper.LogType.Trace); e.Handled = true; } } - else - { - LogHelper.WriteLogToFile($"UIElement_MouseDown: 编辑模式不是Select,无法选择UI元素", LogHelper.LogType.Trace); - } } diff --git a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs index 6303b6ec..6642350e 100644 --- a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs +++ b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs @@ -135,29 +135,12 @@ namespace Ink_Canvas { if (item.StrokeHasBeenCleared) { // Undo: 移除元素 - if (item.InsertedElement != null && targetCanvas.Children.Contains(item.InsertedElement)) { + if (item.InsertedElement != null && targetCanvas.Children.Contains(item.InsertedElement)) targetCanvas.Children.Remove(item.InsertedElement); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 移除UI元素 {item.InsertedElement.GetType().Name}", LogHelper.LogType.Trace); - } } else { // Redo: 添加元素 - if (item.InsertedElement != null) { - // 确保元素不在画布上,如果在就先移除 - if (targetCanvas.Children.Contains(item.InsertedElement)) { - targetCanvas.Children.Remove(item.InsertedElement); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 先移除已存在的UI元素 {item.InsertedElement.GetType().Name}", LogHelper.LogType.Trace); - } - - // 确保元素没有其他父容器 - if (item.InsertedElement is FrameworkElement fe && fe.Parent != null) { - if (fe.Parent is Panel parentPanel) { - parentPanel.Children.Remove(fe); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 从其他父容器移除UI元素 {item.InsertedElement.GetType().Name}", LogHelper.LogType.Trace); - } - } - + if (item.InsertedElement != null && !targetCanvas.Children.Contains(item.InsertedElement)) { targetCanvas.Children.Add(item.InsertedElement); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 添加UI元素 {item.InsertedElement.GetType().Name}", LogHelper.LogType.Trace); // 重新绑定事件处理器(仅对主画布) if (targetCanvas == inkCanvas) { @@ -168,7 +151,6 @@ namespace Ink_Canvas { // 重新应用CenterAndScaleElement变换 CenterAndScaleElement(img); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 重新配置图片元素 {img.Name}", LogHelper.LogType.Trace); } else if (item.InsertedElement is MediaElement media) { media.MouseDown -= UIElement_MouseDown; media.MouseDown += UIElement_MouseDown; @@ -176,7 +158,6 @@ namespace Ink_Canvas { // 重新应用CenterAndScaleElement变换 CenterAndScaleElement(media); - LogHelper.WriteLogToFile($"ApplyHistoryToCanvas: 重新配置媒体元素 {media.Name}", LogHelper.LogType.Trace); } } }