fix:issue #93
This commit is contained in:
@@ -1726,7 +1726,11 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ClearStrokes(false);
|
ClearStrokes(false);
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
|
||||||
@@ -2021,5 +2025,7 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1507,18 +1507,22 @@ namespace Ink_Canvas {
|
|||||||
InkCanvasEditingMode currentEditingMode = inkCanvas.EditingMode;
|
InkCanvasEditingMode currentEditingMode = inkCanvas.EditingMode;
|
||||||
int currentDrawingShapeMode = drawingShapeMode;
|
int currentDrawingShapeMode = drawingShapeMode;
|
||||||
bool currentForceEraser = forceEraser;
|
bool currentForceEraser = forceEraser;
|
||||||
|
|
||||||
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
||||||
inkCanvas.StylusMove -= MainWindow_StylusMove;
|
inkCanvas.StylusMove -= MainWindow_StylusMove;
|
||||||
inkCanvas.StylusUp -= MainWindow_StylusUp;
|
inkCanvas.StylusUp -= MainWindow_StylusUp;
|
||||||
inkCanvas.TouchDown -= MainWindow_TouchDown;
|
inkCanvas.TouchDown -= MainWindow_TouchDown;
|
||||||
inkCanvas.TouchDown += Main_Grid_TouchDown;
|
inkCanvas.TouchDown += Main_Grid_TouchDown;
|
||||||
|
|
||||||
// 先设为None再设回原来的模式,避免可能的事件冲突
|
// 先设为None再设回原来的模式,避免可能的事件冲突
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
isInMultiTouchMode = false;
|
isInMultiTouchMode = false;
|
||||||
|
|
||||||
// 恢复到之前的编辑状态
|
// 恢复到之前的编辑状态
|
||||||
inkCanvas.EditingMode = currentEditingMode;
|
inkCanvas.EditingMode = currentEditingMode;
|
||||||
drawingShapeMode = currentDrawingShapeMode;
|
drawingShapeMode = currentDrawingShapeMode;
|
||||||
@@ -2247,5 +2251,7 @@ namespace Ink_Canvas {
|
|||||||
Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
|
Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
|
||||||
SaveSettingsToFile();
|
SaveSettingsToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,46 @@ namespace Ink_Canvas {
|
|||||||
private Point centerPoint = new Point(0, 0);
|
private Point centerPoint = new Point(0, 0);
|
||||||
private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
|
private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 保存画布上的非笔画元素(如图片、媒体元素等)
|
||||||
|
/// </summary>
|
||||||
|
private List<UIElement> PreserveNonStrokeElements()
|
||||||
|
{
|
||||||
|
var preservedElements = new List<UIElement>();
|
||||||
|
|
||||||
|
// 遍历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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 恢复之前保存的非笔画元素到画布
|
||||||
|
/// </summary>
|
||||||
|
private void RestoreNonStrokeElements(List<UIElement> 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) {
|
private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
if (isInMultiTouchMode) {
|
if (isInMultiTouchMode) {
|
||||||
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
||||||
@@ -31,12 +71,16 @@ namespace Ink_Canvas {
|
|||||||
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
}
|
}
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
isInMultiTouchMode = false;
|
isInMultiTouchMode = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||||
@@ -45,7 +89,11 @@ namespace Ink_Canvas {
|
|||||||
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint) {
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||||
}
|
}
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
isInMultiTouchMode = true;
|
isInMultiTouchMode = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,7 +166,12 @@ namespace Ink_Canvas {
|
|||||||
VisualCanvasList.Remove(e.StylusDevice.Id);
|
VisualCanvasList.Remove(e.StylusDevice.Id);
|
||||||
TouchDownPointsList.Remove(e.StylusDevice.Id);
|
TouchDownPointsList.Remove(e.StylusDevice.Id);
|
||||||
if (StrokeVisualList.Count == 0 || VisualCanvasList.Count == 0 || TouchDownPointsList.Count == 0) {
|
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();
|
StrokeVisualList.Clear();
|
||||||
VisualCanvasList.Clear();
|
VisualCanvasList.Clear();
|
||||||
TouchDownPointsList.Clear();
|
TouchDownPointsList.Clear();
|
||||||
@@ -446,7 +499,11 @@ namespace Ink_Canvas {
|
|||||||
{
|
{
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
}
|
}
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
isInMultiTouchMode = false;
|
isInMultiTouchMode = false;
|
||||||
// 关闭多指书写时,恢复手掌擦开关
|
// 关闭多指书写时,恢复手掌擦开关
|
||||||
if (palmEraserWasEnabledBeforeMultiTouch) {
|
if (palmEraserWasEnabledBeforeMultiTouch) {
|
||||||
@@ -471,7 +528,11 @@ namespace Ink_Canvas {
|
|||||||
{
|
{
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||||
}
|
}
|
||||||
|
// 保存非笔画元素(如图片)
|
||||||
|
var preservedElements = PreserveNonStrokeElements();
|
||||||
inkCanvas.Children.Clear();
|
inkCanvas.Children.Clear();
|
||||||
|
// 恢复非笔画元素
|
||||||
|
RestoreNonStrokeElements(preservedElements);
|
||||||
isInMultiTouchMode = true;
|
isInMultiTouchMode = true;
|
||||||
// 启用多指书写时,自动禁用手掌擦
|
// 启用多指书写时,自动禁用手掌擦
|
||||||
palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;
|
palmEraserWasEnabledBeforeMultiTouch = Settings.Canvas.EnablePalmEraser;
|
||||||
|
|||||||
Reference in New Issue
Block a user