diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
index 37fcd6cf..251d0b0e 100644
--- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -1726,7 +1726,11 @@ namespace Ink_Canvas {
}
ClearStrokes(false);
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
CancelSingleFingerDragMode();
@@ -2021,5 +2025,7 @@ namespace Ink_Canvas {
}
}
}
+
+
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index bffec901..93f84f04 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1507,18 +1507,22 @@ namespace Ink_Canvas {
InkCanvasEditingMode currentEditingMode = inkCanvas.EditingMode;
int currentDrawingShapeMode = drawingShapeMode;
bool currentForceEraser = forceEraser;
-
+
inkCanvas.StylusDown -= MainWindow_StylusDown;
inkCanvas.StylusMove -= MainWindow_StylusMove;
inkCanvas.StylusUp -= MainWindow_StylusUp;
inkCanvas.TouchDown -= MainWindow_TouchDown;
inkCanvas.TouchDown += Main_Grid_TouchDown;
-
+
// 先设为None再设回原来的模式,避免可能的事件冲突
inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
isInMultiTouchMode = false;
-
+
// 恢复到之前的编辑状态
inkCanvas.EditingMode = currentEditingMode;
drawingShapeMode = currentDrawingShapeMode;
@@ -2247,5 +2251,7 @@ namespace Ink_Canvas {
Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
SaveSettingsToFile();
}
+
+
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index 0212112c..7f803d2d 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -21,6 +21,46 @@ namespace Ink_Canvas {
private Point centerPoint = new Point(0, 0);
private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
+ ///
+ /// 保存画布上的非笔画元素(如图片、媒体元素等)
+ ///
+ private List PreserveNonStrokeElements()
+ {
+ var preservedElements = new List();
+
+ // 遍历inkCanvas的所有子元素
+ for (int i = inkCanvas.Children.Count - 1; i >= 0; i--)
+ {
+ var child = inkCanvas.Children[i];
+
+ // 保存图片、媒体元素等非笔画相关的UI元素
+ if (child is Image || child is MediaElement ||
+ (child is Border border && border.Name != "AdvancedEraserOverlay"))
+ {
+ preservedElements.Add(child);
+ }
+ }
+
+ return preservedElements;
+ }
+
+ ///
+ /// 恢复之前保存的非笔画元素到画布
+ ///
+ private void RestoreNonStrokeElements(List preservedElements)
+ {
+ if (preservedElements == null) return;
+
+ foreach (var element in preservedElements)
+ {
+ // 确保元素没有父容器再添加到inkCanvas
+ if (element is FrameworkElement fe && fe.Parent == null)
+ {
+ inkCanvas.Children.Add(element);
+ }
+ }
+ }
+
private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) {
if (isInMultiTouchMode) {
inkCanvas.StylusDown -= MainWindow_StylusDown;
@@ -31,12 +71,16 @@ namespace Ink_Canvas {
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
isInMultiTouchMode = false;
-
+
}
else {
-
+
inkCanvas.StylusDown += MainWindow_StylusDown;
inkCanvas.StylusMove += MainWindow_StylusMove;
inkCanvas.StylusUp += MainWindow_StylusUp;
@@ -45,7 +89,11 @@ namespace Ink_Canvas {
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
isInMultiTouchMode = true;
}
}
@@ -118,7 +166,12 @@ namespace Ink_Canvas {
VisualCanvasList.Remove(e.StylusDevice.Id);
TouchDownPointsList.Remove(e.StylusDevice.Id);
if (StrokeVisualList.Count == 0 || VisualCanvasList.Count == 0 || TouchDownPointsList.Count == 0) {
- inkCanvas.Children.Clear();
+ // 只清除手写笔预览相关的Canvas,不清除所有子元素
+ foreach (var canvas in VisualCanvasList.Values.ToList()) {
+ if (inkCanvas.Children.Contains(canvas)) {
+ inkCanvas.Children.Remove(canvas);
+ }
+ }
StrokeVisualList.Clear();
VisualCanvasList.Clear();
TouchDownPointsList.Clear();
@@ -446,7 +499,11 @@ namespace Ink_Canvas {
{
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
isInMultiTouchMode = false;
// 关闭多指书写时,恢复手掌擦开关
if (palmEraserWasEnabledBeforeMultiTouch) {
@@ -471,7 +528,11 @@ namespace Ink_Canvas {
{
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
+ // 保存非笔画元素(如图片)
+ var preservedElements = PreserveNonStrokeElements();
inkCanvas.Children.Clear();
+ // 恢复非笔画元素
+ RestoreNonStrokeElements(preservedElements);
isInMultiTouchMode = true;
// 启用多指书写时,自动禁用手掌擦
palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;