代码清理

This commit is contained in:
PrefacedCorg
2025-08-03 16:46:33 +08:00
parent 745b798d89
commit 11a5a7fdbe
73 changed files with 5733 additions and 3857 deletions
+278 -144
View File
@@ -1,4 +1,5 @@
using System;
using Ink_Canvas.Helpers;
using System;
using System.Diagnostics;
using System.Linq;
using System.Windows;
@@ -6,10 +7,11 @@ using System.Windows.Controls;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using Ink_Canvas.Helpers;
namespace Ink_Canvas {
public partial class MainWindow : Window {
namespace Ink_Canvas
{
public partial class MainWindow : Window
{
// 新橡皮擦系统的核心变量
public bool isUsingAdvancedEraser;
@@ -79,19 +81,21 @@ namespace Ink_Canvas {
/// <summary>
/// 新橡皮擦覆盖层加载事件处理
/// </summary>
private void EraserOverlay_Loaded(object sender, RoutedEventArgs e) {
private void EraserOverlay_Loaded(object sender, RoutedEventArgs e)
{
var border = (Border)sender;
// 初始化覆盖层
InitializeEraserOverlay(border);
Trace.WriteLine("Advanced Eraser: Overlay loaded and initialized");
}
/// <summary>
/// 开始高级橡皮擦操作
/// </summary>
private void StartAdvancedEraserOperation(object sender) {
private void StartAdvancedEraserOperation(object sender)
{
if (isUsingAdvancedEraser) return;
// 设置操作状态
@@ -119,7 +123,8 @@ namespace Ink_Canvas {
/// </summary>
private StylusShape CreateEraserShape()
{
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
return new EllipseStylusShape(currentEraserSize, currentEraserSize);
}
@@ -130,14 +135,18 @@ namespace Ink_Canvas {
/// <summary>
/// 初始化橡皮擦变换矩阵
/// </summary>
private void InitializeEraserTransform() {
private void InitializeEraserTransform()
{
eraserTransformMatrix = new Matrix();
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
// 圆形橡皮擦:等比例缩放
var scale = currentEraserSize / 56.0; // 基于56x56的基准尺寸
eraserTransformMatrix.ScaleAt(scale, scale, 0, 0);
} else {
}
else
{
// 矩形橡皮擦:保持传统比例
var scaleX = currentEraserSize / 38.0;
var scaleY = (currentEraserSize * 56 / 38) / 56.0;
@@ -148,11 +157,13 @@ namespace Ink_Canvas {
/// <summary>
/// 更新橡皮擦尺寸
/// </summary>
private void UpdateEraserSize() {
private void UpdateEraserSize()
{
// 使用与原来相同的逻辑计算橡皮擦尺寸
double k = 1.0;
switch (Settings.Canvas.EraserSize) {
switch (Settings.Canvas.EraserSize)
{
case 0: k = Settings.Canvas.EraserShapeType == 0 ? 0.5 : 0.7; break;
case 1: k = Settings.Canvas.EraserShapeType == 0 ? 0.8 : 0.9; break;
case 2: k = 1.0; break;
@@ -162,11 +173,14 @@ namespace Ink_Canvas {
// 更新形状类型
isCurrentEraserCircle = (Settings.Canvas.EraserShapeType == 0);
// 根据形状类型设置尺寸
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
currentEraserSize = k * 90; // 圆形橡皮擦
} else {
}
else
{
currentEraserSize = k * 90 * 0.6; // 矩形橡皮擦宽度
}
}
@@ -174,7 +188,8 @@ namespace Ink_Canvas {
/// <summary>
/// 结束高级橡皮擦操作
/// </summary>
private void EndAdvancedEraserOperation(object sender) {
private void EndAdvancedEraserOperation(object sender)
{
if (!isUsingAdvancedEraser) return;
// 重置操作状态
@@ -182,7 +197,8 @@ namespace Ink_Canvas {
isEraserVisible = false;
// 释放鼠标捕获
if (sender is Border border) {
if (sender is Border border)
{
border.ReleaseMouseCapture();
}
@@ -190,7 +206,8 @@ namespace Ink_Canvas {
HideEraserFeedback();
// 结束碰撞检测
if (advancedHitTester != null) {
if (advancedHitTester != null)
{
advancedHitTester.EndHitTesting();
advancedHitTester = null;
}
@@ -202,12 +219,17 @@ namespace Ink_Canvas {
/// <summary>
/// 隐藏橡皮擦视觉反馈
/// </summary>
private void HideEraserFeedback() {
try {
if (eraserVisualBorder != null) {
private void HideEraserFeedback()
{
try
{
if (eraserVisualBorder != null)
{
eraserVisualBorder.Visibility = Visibility.Collapsed;
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error hiding feedback - {ex.Message}");
}
}
@@ -215,14 +237,19 @@ namespace Ink_Canvas {
/// <summary>
/// 提交橡皮擦历史记录
/// </summary>
private void CommitEraserHistory() {
try {
if (ReplacedStroke != null || AddedStroke != null) {
private void CommitEraserHistory()
{
try
{
if (ReplacedStroke != null || AddedStroke != null)
{
timeMachine.CommitStrokeEraseHistory(ReplacedStroke, AddedStroke);
AddedStroke = null;
ReplacedStroke = null;
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error committing history - {ex.Message}");
}
}
@@ -230,8 +257,10 @@ namespace Ink_Canvas {
/// <summary>
/// 高级橡皮擦笔画碰撞事件处理
/// </summary>
private void OnAdvancedEraserStrokeHit(object sender, StrokeHitEventArgs args) {
try {
private void OnAdvancedEraserStrokeHit(object sender, StrokeHitEventArgs args)
{
try
{
var inkCanvas = FindName("inkCanvas") as InkCanvas;
if (inkCanvas == null) return;
@@ -248,15 +277,20 @@ namespace Ink_Canvas {
var filteredResultArray = filteredResult as Stroke[] ?? filteredResult.ToArray();
// 执行笔画替换或删除
if (filteredResultArray.Any()) {
if (filteredResultArray.Any())
{
inkCanvas.Strokes.Replace(
new StrokeCollection(filteredToReplaceArray),
new StrokeCollection(filteredResultArray)
);
} else {
}
else
{
inkCanvas.Strokes.Remove(new StrokeCollection(filteredToReplaceArray));
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error in stroke hit - {ex.Message}");
}
}
@@ -264,13 +298,15 @@ namespace Ink_Canvas {
/// <summary>
/// 更新高级橡皮擦位置
/// </summary>
private void UpdateAdvancedEraserPosition(object sender, Point position) {
private void UpdateAdvancedEraserPosition(object sender, Point position)
{
// 移除isUsingAdvancedEraser检查,让视觉反馈始终更新
// if (!isUsingAdvancedEraser) return;
// 性能优化:限制更新频率
var now = DateTime.Now;
if ((now - lastEraserUpdate).TotalMilliseconds < ERASER_UPDATE_INTERVAL) {
if ((now - lastEraserUpdate).TotalMilliseconds < ERASER_UPDATE_INTERVAL)
{
return;
}
lastEraserUpdate = now;
@@ -282,11 +318,15 @@ namespace Ink_Canvas {
UpdateEraserVisualFeedback(position);
// 只有在实际使用橡皮擦时才处理擦除
if (isUsingAdvancedEraser) {
if (isUsingAdvancedEraser)
{
// 处理不同的橡皮擦模式
if (isUsingStrokeEraser) {
if (isUsingStrokeEraser)
{
ProcessStrokeEraserAtPosition(position);
} else {
}
else
{
ProcessGeometryEraserAtPosition(position);
}
}
@@ -295,8 +335,10 @@ namespace Ink_Canvas {
/// <summary>
/// 在指定位置处理笔画橡皮擦
/// </summary>
private void ProcessStrokeEraserAtPosition(Point position) {
try {
private void ProcessStrokeEraserAtPosition(Point position)
{
try
{
var inkCanvas = FindName("inkCanvas") as InkCanvas;
if (inkCanvas == null) return;
@@ -304,10 +346,13 @@ namespace Ink_Canvas {
.Where(stroke => !stroke.ContainsPropertyData(IsLockGuid));
var strokesArray = hitStrokes as Stroke[] ?? hitStrokes.ToArray();
if (strokesArray.Any()) {
if (strokesArray.Any())
{
inkCanvas.Strokes.Remove(new StrokeCollection(strokesArray));
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error in stroke eraser - {ex.Message}");
}
}
@@ -315,12 +360,17 @@ namespace Ink_Canvas {
/// <summary>
/// 在指定位置处理几何橡皮擦
/// </summary>
private void ProcessGeometryEraserAtPosition(Point position) {
try {
if (advancedHitTester != null) {
private void ProcessGeometryEraserAtPosition(Point position)
{
try
{
if (advancedHitTester != null)
{
advancedHitTester.AddPoint(position);
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error in geometry eraser - {ex.Message}");
}
}
@@ -328,11 +378,15 @@ namespace Ink_Canvas {
/// <summary>
/// 更新橡皮擦视觉反馈
/// </summary>
private void UpdateEraserVisualFeedback(Point position) {
try {
private void UpdateEraserVisualFeedback(Point position)
{
try
{
// 获取或创建橡皮擦视觉反馈Border
if (eraserVisualBorder == null) {
eraserVisualBorder = new Border {
if (eraserVisualBorder == null)
{
eraserVisualBorder = new Border
{
Background = new SolidColorBrush(Colors.Transparent),
BorderBrush = new SolidColorBrush(Colors.Transparent),
BorderThickness = new Thickness(0),
@@ -342,53 +396,62 @@ namespace Ink_Canvas {
Opacity = 1
};
Panel.SetZIndex(eraserVisualBorder, 1001);
// 将Border添加到InkCanvasGridForInkReplay中
var inkCanvasGrid = FindName("InkCanvasGridForInkReplay") as Grid;
if (inkCanvasGrid != null) {
if (inkCanvasGrid != null)
{
inkCanvasGrid.Children.Add(eraserVisualBorder);
Trace.WriteLine("Advanced Eraser: Visual feedback border added to grid");
} else {
}
else
{
Trace.WriteLine("Advanced Eraser: Failed to find InkCanvasGridForInkReplay");
return; // 如果找不到Grid,直接返回
}
}
if (eraserVisualBorder != null) {
if (eraserVisualBorder != null)
{
// 创建橡皮擦视觉反馈
var eraserImage = CreateEraserVisualImage();
// 清除Border的内容并添加新的图像
eraserVisualBorder.Child = eraserImage;
// 更新橡皮擦位置和大小
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
var radius = currentEraserSize / 2;
eraserVisualBorder.Width = currentEraserSize;
eraserVisualBorder.Height = currentEraserSize;
// 使用Margin来定位,因为Border在Grid中
eraserVisualBorder.Margin = new Thickness(
position.X - radius,
position.Y - radius,
position.X - radius,
position.Y - radius,
0, 0);
} else {
}
else
{
// 矩形橡皮擦,使用与原来相同的逻辑
var height = currentEraserSize / 0.6;
eraserVisualBorder.Width = currentEraserSize;
eraserVisualBorder.Height = height;
// 使用Margin来定位,因为Border在Grid中
eraserVisualBorder.Margin = new Thickness(
position.X - currentEraserSize / 2,
position.Y - height / 2,
position.X - currentEraserSize / 2,
position.Y - height / 2,
0, 0);
}
eraserVisualBorder.Visibility = Visibility.Visible;
Trace.WriteLine($"Advanced Eraser: Visual feedback updated to ({position.X:F1}, {position.Y:F1})");
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error updating visual feedback - {ex.Message}");
}
}
@@ -396,14 +459,17 @@ namespace Ink_Canvas {
/// <summary>
/// 创建橡皮擦视觉图像
/// </summary>
private Image CreateEraserVisualImage() {
try {
private Image CreateEraserVisualImage()
{
try
{
// 根据橡皮擦形状选择对应的DrawingGroup资源
string resourceKey = isCurrentEraserCircle ? "EraserCircleDrawingGroup" : "EraserDrawingGroup";
// 尝试从资源字典中获取DrawingGroup
var drawingGroup = TryFindResource(resourceKey) as DrawingGroup;
if (drawingGroup == null) {
if (drawingGroup == null)
{
// 如果找不到资源,创建默认的橡皮擦图像
return CreateDefaultEraserImage();
}
@@ -411,14 +477,17 @@ namespace Ink_Canvas {
// 创建变换后的DrawingGroup
var transformedGroup = new DrawingGroup();
transformedGroup.Children.Add(drawingGroup);
// 应用缩放变换
var transform = new ScaleTransform();
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
var scale = currentEraserSize / 56.0; // 基于56x56的基准尺寸
transform.ScaleX = scale;
transform.ScaleY = scale;
} else {
}
else
{
var scaleX = currentEraserSize / 38.0;
var scaleY = (currentEraserSize / 0.6) / 56.0;
transform.ScaleX = scaleX;
@@ -428,16 +497,19 @@ namespace Ink_Canvas {
// 创建DrawingImage
var drawingImage = new DrawingImage(transformedGroup);
// 创建Image控件
var image = new Image {
var image = new Image
{
Source = drawingImage,
Stretch = Stretch.None
};
RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.HighQuality);
return image;
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error creating eraser visual image - {ex.Message}");
return CreateDefaultEraserImage();
}
@@ -446,13 +518,18 @@ namespace Ink_Canvas {
/// <summary>
/// 创建默认的橡皮擦图像(当资源不可用时)
/// </summary>
private Image CreateDefaultEraserImage() {
try {
private Image CreateDefaultEraserImage()
{
try
{
// 创建一个简单的几何图形作为默认橡皮擦
Geometry geometry;
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
geometry = new EllipseGeometry(new Point(28, 28), 28, 28);
} else {
}
else
{
geometry = new RectangleGeometry(new Rect(0, 0, 38, 56));
}
@@ -465,11 +542,14 @@ namespace Ink_Canvas {
// 应用缩放变换
var transform = new ScaleTransform();
if (isCurrentEraserCircle) {
if (isCurrentEraserCircle)
{
var scale = currentEraserSize / 56.0;
transform.ScaleX = scale;
transform.ScaleY = scale;
} else {
}
else
{
var scaleX = currentEraserSize / 38.0;
var scaleY = (currentEraserSize / 0.6) / 56.0;
transform.ScaleX = scaleX;
@@ -478,13 +558,16 @@ namespace Ink_Canvas {
drawingGroup.Transform = transform;
var drawingImage = new DrawingImage(drawingGroup);
var image = new Image {
var image = new Image
{
Source = drawingImage,
Stretch = Stretch.None
};
return image;
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error creating default eraser image - {ex.Message}");
return null;
}
@@ -494,7 +577,8 @@ namespace Ink_Canvas {
/// 兼容性方法:旧版橡皮擦几何碰撞处理
/// </summary>
[Obsolete("使用 OnAdvancedEraserStrokeHit 替代")]
private void EraserGeometry_StrokeHit(object sender, StrokeHitEventArgs args) {
private void EraserGeometry_StrokeHit(object sender, StrokeHitEventArgs args)
{
OnAdvancedEraserStrokeHit(sender, args);
}
@@ -502,7 +586,8 @@ namespace Ink_Canvas {
/// 兼容性方法:旧版橡皮擦移动处理
/// </summary>
[Obsolete("使用 UpdateAdvancedEraserPosition 替代")]
private void EraserOverlay_PointerMove(object sender, Point pt) {
private void EraserOverlay_PointerMove(object sender, Point pt)
{
UpdateAdvancedEraserPosition(sender, pt);
}
@@ -510,7 +595,8 @@ namespace Ink_Canvas {
/// 兼容性方法:旧版橡皮擦按下处理
/// </summary>
[Obsolete("使用 StartAdvancedEraserOperation 替代")]
private void EraserOverlay_PointerDown(object sender) {
private void EraserOverlay_PointerDown(object sender)
{
StartAdvancedEraserOperation(sender);
}
@@ -518,14 +604,16 @@ namespace Ink_Canvas {
/// 兼容性方法:旧版橡皮擦抬起处理
/// </summary>
[Obsolete("使用 EndAdvancedEraserOperation 替代")]
private void EraserOverlay_PointerUp(object sender) {
private void EraserOverlay_PointerUp(object sender)
{
EndAdvancedEraserOperation(sender);
}
/// <summary>
/// 获取当前橡皮擦状态信息(用于调试)
/// </summary>
public string GetEraserStatusInfo() {
public string GetEraserStatusInfo()
{
return "Advanced Eraser Status:\n" +
$"- Active: {isUsingAdvancedEraser}\n" +
$"- Size: {currentEraserSize:F1}\n" +
@@ -538,22 +626,26 @@ namespace Ink_Canvas {
/// <summary>
/// 重置橡皮擦状态
/// </summary>
public void ResetEraserState() {
public void ResetEraserState()
{
isUsingAdvancedEraser = false;
isEraserVisible = false;
lastEraserPosition = new Point();
if (advancedHitTester != null) {
if (advancedHitTester != null)
{
advancedHitTester.EndHitTesting();
advancedHitTester = null;
}
HideEraserFeedback();
// 清理视觉反馈Border
if (eraserVisualBorder != null) {
if (eraserVisualBorder != null)
{
var inkCanvasGrid = FindName("InkCanvasGridForInkReplay") as Grid;
if (inkCanvasGrid != null) {
if (inkCanvasGrid != null)
{
inkCanvasGrid.Children.Remove(eraserVisualBorder);
}
eraserVisualBorder = null;
@@ -563,8 +655,10 @@ namespace Ink_Canvas {
/// <summary>
/// 应用高级橡皮擦形状到InkCanvas
/// </summary>
public void ApplyAdvancedEraserShape() {
try {
public void ApplyAdvancedEraserShape()
{
try
{
var inkCanvas = FindName("inkCanvas") as InkCanvas;
if (inkCanvas == null) return;
@@ -578,13 +672,18 @@ namespace Ink_Canvas {
inkCanvas.EraserShape = eraserShape;
Trace.WriteLine($"Advanced Eraser: Applied shape - Size: {currentEraserSize}, Circle: {isCurrentEraserCircle}");
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error applying shape - {ex.Message}");
// 回退到传统方法
try {
try
{
ApplyCurrentEraserShape();
} catch (Exception fallbackEx) {
}
catch (Exception fallbackEx)
{
Trace.WriteLine($"Advanced Eraser: Fallback also failed - {fallbackEx.Message}");
}
}
@@ -593,33 +692,42 @@ namespace Ink_Canvas {
/// <summary>
/// 启用高级橡皮擦系统
/// </summary>
public void EnableAdvancedEraserSystem() {
try {
public void EnableAdvancedEraserSystem()
{
try
{
// 获取橡皮擦覆盖层
var eraserOverlay = FindName("AdvancedEraserOverlay") as Border;
if (eraserOverlay != null) {
if (eraserOverlay != null)
{
// 启用覆盖层的交互
eraserOverlay.IsHitTestVisible = true;
// 确保覆盖层在橡皮擦模式下启用
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
eraserOverlay.IsHitTestVisible = true;
Trace.WriteLine("Advanced Eraser: Overlay enabled for eraser mode");
}
// 设置覆盖层的大小以覆盖整个InkCanvas
var inkCanvasControl = FindName("inkCanvas") as InkCanvas;
if (inkCanvasControl != null) {
if (inkCanvasControl != null)
{
eraserOverlay.Width = inkCanvasControl.ActualWidth;
eraserOverlay.Height = inkCanvasControl.ActualHeight;
Trace.WriteLine($"Advanced Eraser: Overlay size set to {eraserOverlay.Width}x{eraserOverlay.Height}");
}
Trace.WriteLine("Advanced Eraser: System enabled successfully");
} else {
}
else
{
Trace.WriteLine("Advanced Eraser: Failed to find eraser overlay");
}
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error enabling system - {ex.Message}");
}
}
@@ -627,69 +735,89 @@ namespace Ink_Canvas {
/// <summary>
/// 初始化橡皮擦覆盖层
/// </summary>
private void InitializeEraserOverlay(Border overlay) {
try {
private void InitializeEraserOverlay(Border overlay)
{
try
{
// 设置覆盖层的基本属性
overlay.Background = new SolidColorBrush(Colors.Transparent);
overlay.IsHitTestVisible = false; // 默认禁用,只在橡皮擦模式下启用
// 绑定事件处理
overlay.MouseDown += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.MouseDown += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
overlay.CaptureMouse();
StartAdvancedEraserOperation(sender);
}
};
overlay.MouseUp += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.MouseUp += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
overlay.ReleaseMouseCapture();
EndAdvancedEraserOperation(sender);
}
};
overlay.MouseMove += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.MouseMove += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
var position = e.GetPosition((UIElement)FindName("inkCanvas"));
Trace.WriteLine($"Advanced Eraser: Mouse move event triggered at ({position.X:F1}, {position.Y:F1})");
UpdateAdvancedEraserPosition(sender, position);
} else {
}
else
{
Trace.WriteLine($"Advanced Eraser: Mouse move ignored - not in eraser mode, current mode: {inkCanvas.EditingMode}");
}
};
// 触控笔事件
overlay.StylusDown += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.StylusDown += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
e.Handled = true;
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus)
{
overlay.CaptureStylus();
}
StartAdvancedEraserOperation(sender);
}
};
overlay.StylusUp += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.StylusUp += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
e.Handled = true;
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus)
{
overlay.ReleaseStylusCapture();
}
EndAdvancedEraserOperation(sender);
}
};
overlay.StylusMove += (sender, e) => {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
overlay.StylusMove += (sender, e) =>
{
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
{
e.Handled = true;
var position = e.GetPosition((UIElement)FindName("inkCanvas"));
UpdateAdvancedEraserPosition(sender, position);
Trace.WriteLine($"Advanced Eraser: Stylus move at ({position.X:F1}, {position.Y:F1})");
}
};
Trace.WriteLine("Advanced Eraser: Overlay initialized successfully");
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error initializing overlay - {ex.Message}");
}
}
@@ -697,22 +825,27 @@ namespace Ink_Canvas {
/// <summary>
/// 禁用高级橡皮擦系统
/// </summary>
public void DisableAdvancedEraserSystem() {
try {
public void DisableAdvancedEraserSystem()
{
try
{
// 重置橡皮擦状态
ResetEraserState();
// 获取橡皮擦覆盖层并禁用
var eraserOverlay = FindName("AdvancedEraserOverlay") as Border;
if (eraserOverlay != null) {
if (eraserOverlay != null)
{
eraserOverlay.IsHitTestVisible = false;
}
// 确保视觉反馈被隐藏
HideEraserFeedback();
Trace.WriteLine("Advanced Eraser: System disabled successfully");
} catch (Exception ex) {
}
catch (Exception ex)
{
Trace.WriteLine($"Advanced Eraser: Error disabling system - {ex.Message}");
}
}
@@ -720,7 +853,8 @@ namespace Ink_Canvas {
/// <summary>
/// 切换橡皮擦形状(圆形/矩形)
/// </summary>
public void ToggleEraserShape() {
public void ToggleEraserShape()
{
isCurrentEraserCircle = !isCurrentEraserCircle;
// 更新设置
@@ -730,6 +864,6 @@ namespace Ink_Canvas {
ApplyAdvancedEraserShape();
Trace.WriteLine($"Advanced Eraser: Toggled to {(isCurrentEraserCircle ? "Circle" : "Rectangle")}");
}
}
}
}