From c48ca9ee89fad49bb21198c6afb811daa19333cf Mon Sep 17 00:00:00 2001 From: CJKmkp <2564608840@qq.com> Date: Mon, 28 Jul 2025 16:04:36 +0800 Subject: [PATCH] fix:issue #93 --- Ink Canvas/MainWindow_cs/MW_BoardControls.cs | 27 ++++++++++---------- Ink Canvas/MainWindow_cs/MW_PageListView.cs | 6 +++-- Ink Canvas/MainWindow_cs/MW_TimeMachine.cs | 17 ++++++++---- 3 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs index 8cd083f1..3d3a0e98 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs @@ -42,20 +42,10 @@ namespace Ink_Canvas { // 取消任何UI元素的选择,隐藏拉伸控件 DeselectUIElement(); - // 记录要清除的图片元素到时间机器历史中 - var elementsToRemove = new List(); - foreach (UIElement element in inkCanvas.Children) { - elementsToRemove.Add(element); - } - - // 为每个图片元素创建清除历史记录 - foreach (var element in elementsToRemove) { - timeMachine.CommitElementRemoveHistory(element); - } - + // 只清除笔画,不清除图片元素 + // 图片元素的清除由调用方决定 inkCanvas.Strokes.Clear(); - // 清除所有子元素(包括图片) - inkCanvas.Children.Clear(); + _currentCommitType = CommitReason.UserInput; } @@ -63,12 +53,18 @@ namespace Ink_Canvas { private void RestoreStrokes(bool isBackupMain = false) { try { var targetIndex = isBackupMain ? 0 : CurrentWhiteboardIndex; - if (TimeMachineHistories[targetIndex] == null) return; //防止白板打开后不居中 // 先清空当前画布的所有内容(墨迹和图片) + // 这里必须清除图片,因为页面切换时需要完全重置画布状态 inkCanvas.Strokes.Clear(); inkCanvas.Children.Clear(); + // 如果历史记录为空,直接返回(新页面或空页面) + if (TimeMachineHistories[targetIndex] == null) { + timeMachine.ClearStrokeHistory(); + return; + } + if (isBackupMain) { timeMachine.ImportTimeMachineHistory(TimeMachineHistories[0]); foreach (var item in TimeMachineHistories[0]) ApplyHistoryToCanvas(item); @@ -174,6 +170,9 @@ namespace Ink_Canvas { // 确保新页面的历史记录为空 TimeMachineHistories[CurrentWhiteboardIndex] = null; + // 恢复新页面(这会清空画布,因为历史记录为null) + RestoreStrokes(); + UpdateIndexInfoDisplay(); if (WhiteboardTotalCount >= 99) BtnWhiteBoardAdd.IsEnabled = false; diff --git a/Ink Canvas/MainWindow_cs/MW_PageListView.cs b/Ink Canvas/MainWindow_cs/MW_PageListView.cs index c605a7d2..4944498a 100644 --- a/Ink Canvas/MainWindow_cs/MW_PageListView.cs +++ b/Ink Canvas/MainWindow_cs/MW_PageListView.cs @@ -81,7 +81,7 @@ namespace Ink_Canvas // 只有当选择的页面与当前页面不同时才进行切换 if (index + 1 != CurrentWhiteboardIndex) { - // 取消任何UI元素的选择 + // 取消任何UI元素的选择(只在真正切换页面时) DeselectUIElement(); SaveStrokes(); @@ -90,6 +90,7 @@ namespace Ink_Canvas RestoreStrokes(); UpdateIndexInfoDisplay(); } + // 无论是否切换页面,都更新选择索引 BlackBoardLeftSidePageListView.SelectedIndex = index; } } @@ -105,7 +106,7 @@ namespace Ink_Canvas // 只有当选择的页面与当前页面不同时才进行切换 if (index + 1 != CurrentWhiteboardIndex) { - // 取消任何UI元素的选择 + // 取消任何UI元素的选择(只在真正切换页面时) DeselectUIElement(); SaveStrokes(); @@ -114,6 +115,7 @@ namespace Ink_Canvas RestoreStrokes(); UpdateIndexInfoDisplay(); } + // 无论是否切换页面,都更新选择索引 BlackBoardRightSidePageListView.SelectedIndex = index; } } diff --git a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs index 7e14c53c..d5409d6a 100644 --- a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs +++ b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs @@ -130,14 +130,17 @@ namespace Ink_Canvas { canvas.Strokes.Remove(currentStroke); } } else if (item.CommitType == TimeMachineHistoryType.ElementInsert) { + // 使用传入的canvas参数,而不是总是使用inkCanvas + var targetCanvas = canvas ?? inkCanvas; + if (item.StrokeHasBeenCleared) { // Undo: 移除元素 - if (item.InsertedElement != null && inkCanvas.Children.Contains(item.InsertedElement)) - inkCanvas.Children.Remove(item.InsertedElement); + if (item.InsertedElement != null && targetCanvas.Children.Contains(item.InsertedElement)) + targetCanvas.Children.Remove(item.InsertedElement); } else { // Redo: 添加元素 - if (item.InsertedElement != null && !inkCanvas.Children.Contains(item.InsertedElement)) - inkCanvas.Children.Add(item.InsertedElement); + if (item.InsertedElement != null && !targetCanvas.Children.Contains(item.InsertedElement)) + targetCanvas.Children.Add(item.InsertedElement); } } @@ -153,7 +156,11 @@ namespace Ink_Canvas { if (items != null && items.Length > 0) { foreach (var timeMachineHistory in items) { - ApplyHistoryToCanvas(timeMachineHistory, fakeInkCanv); + // 只处理笔画历史,不处理图片元素历史 + // 因为页面预览只需要显示笔画,图片元素会影响主画布 + if (timeMachineHistory.CommitType != TimeMachineHistoryType.ElementInsert) { + ApplyHistoryToCanvas(timeMachineHistory, fakeInkCanv); + } } }