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