improve:插入图片improve:插入图片

This commit is contained in:
2025-08-30 23:19:53 +08:00
parent 5d13c8b543
commit 3bae64a2c7
3 changed files with 66 additions and 14 deletions
@@ -163,8 +163,9 @@ namespace Ink_Canvas
{
// 清除当前选择,避免显示控制点
inkCanvas.Select(new StrokeCollection());
// 设置编辑模式为非选择模式
inkCanvas.EditingMode = InkCanvasEditingMode.None;
// 设置编辑模式为Ink模式,这样可以保持图片的交互功能
// 同时通过图片的IsHitTestVisible和Focusable属性来避免InkCanvas选择系统的干扰
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
// 添加到画布
+21 -12
View File
@@ -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)
{
@@ -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);
}
}