diff --git a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs index 0db312ab..fc8eb43e 100644 --- a/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs +++ b/Ink Canvas/MainWindow_cs/MW_ClipboardHandler.cs @@ -163,8 +163,9 @@ namespace Ink_Canvas { // 清除当前选择,避免显示控制点 inkCanvas.Select(new StrokeCollection()); - // 设置编辑模式为非选择模式 - inkCanvas.EditingMode = InkCanvasEditingMode.None; + // 设置编辑模式为Ink模式,这样可以保持图片的交互功能 + // 同时通过图片的IsHitTestVisible和Focusable属性来避免InkCanvas选择系统的干扰 + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } // 添加到画布 diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs index ca5a5f8b..c23719af 100644 --- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs @@ -50,14 +50,23 @@ namespace Ink_Canvas // 先添加到画布 inkCanvas.Children.Add(image); - // 初始化TransformGroup - InitializeElementTransform(image); + // 等待图片加载完成后再进行后续处理 + image.Loaded += (s, args) => + { + Dispatcher.BeginInvoke(new Action(() => + { + // 初始化TransformGroup + InitializeElementTransform(image); - // 居中缩放 - CenterAndScaleElement(image); + // 居中缩放 + CenterAndScaleElement(image); - // 绑定事件处理器 - BindElementEvents(image); + // 最后绑定事件处理器 + BindElementEvents(image); + + LogHelper.WriteLogToFile($"图片插入完成: {image.Name}"); + }), System.Windows.Threading.DispatcherPriority.Loaded); + }; timeMachine.CommitElementInsertHistory(image); } @@ -101,7 +110,7 @@ namespace Ink_Canvas { if (sender is FrameworkElement element) { - LogHelper.WriteLogToFile($"图片鼠标按下: {element.Name}"); + // 取消之前选中的元素 if (currentSelectedElement != null && currentSelectedElement != element) @@ -155,7 +164,7 @@ namespace Ink_Canvas { if (sender is FrameworkElement element) { - LogHelper.WriteLogToFile($"图片滚轮事件: {element.Name}, Delta={e.Delta}"); + // 使用滚轮缩放的核心机制 ApplyWheelScaleTransform(element, e); @@ -314,7 +323,7 @@ namespace Ink_Canvas stroke.Transform(matrix, false); } - LogHelper.WriteLogToFile($"滚轮缩放应用: 缩放因子={scaleFactor}, 中心点=({elementCenter.X}, {elementCenter.Y})"); + } catch (Exception ex) { @@ -351,7 +360,7 @@ namespace Ink_Canvas CommitTransformHistory(element, initialTransform, transformGroup); } - LogHelper.WriteLogToFile($"矩阵变换应用成功: 元素={element.Name}"); + } catch (Exception ex) { @@ -384,7 +393,7 @@ namespace Ink_Canvas // 更新选择框的位置(如果有选择框) UpdateSelectionBorderPosition(delta); - LogHelper.WriteLogToFile($"鼠标拖动应用: 位移=({delta.X}, {delta.Y})"); + } catch (Exception ex) { @@ -481,7 +490,7 @@ namespace Ink_Canvas stroke.Transform(matrix, false); } - LogHelper.WriteLogToFile($"触摸操作应用: 平移=({translation.X}, {translation.Y}), 旋转={rotation}, 缩放=({scale.X}, {scale.Y})"); + } catch (Exception ex) { diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index f6fe9c6f..3e90076a 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -2821,9 +2821,51 @@ namespace Ink_Canvas string timestamp = "img_" + DateTime.Now.ToString("yyyyMMdd_HH_mm_ss_fff"); image.Name = timestamp; + // 初始化TransformGroup + if (image is FrameworkElement element) + { + var transformGroup = new TransformGroup(); + transformGroup.Children.Add(new ScaleTransform(1, 1)); + transformGroup.Children.Add(new TranslateTransform(0, 0)); + transformGroup.Children.Add(new RotateTransform(0)); + element.RenderTransform = transformGroup; + } + CenterAndScaleElement(image); + + // 设置图片属性,避免被InkCanvas选择系统处理 + image.IsHitTestVisible = true; + image.Focusable = false; + + // 初始化InkCanvas选择设置 + if (inkCanvas != null) + { + // 清除当前选择,避免显示控制点 + inkCanvas.Select(new StrokeCollection()); + // 同时通过图片的IsHitTestVisible和Focusable属性来避免InkCanvas选择系统的干扰 + inkCanvas.EditingMode = InkCanvasEditingMode.None; + } + inkCanvas.Children.Add(image); + // 绑定事件处理器 + if (image is FrameworkElement elementForEvents) + { + // 鼠标事件 + elementForEvents.MouseLeftButtonDown += Element_MouseLeftButtonDown; + elementForEvents.MouseLeftButtonUp += Element_MouseLeftButtonUp; + elementForEvents.MouseMove += Element_MouseMove; + elementForEvents.MouseWheel += Element_MouseWheel; + + // 触摸事件 + elementForEvents.IsManipulationEnabled = true; + elementForEvents.ManipulationDelta += Element_ManipulationDelta; + elementForEvents.ManipulationCompleted += Element_ManipulationCompleted; + + // 设置光标 + elementForEvents.Cursor = Cursors.Hand; + } + timeMachine.CommitElementInsertHistory(image); } }