diff --git a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
index 97b37634..0daf4189 100644
--- a/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
+++ b/Ink Canvas/MainWindow_cs/MW_ElementsControls.cs
@@ -196,7 +196,16 @@ namespace Ink_Canvas
{
if (sender is FrameworkElement element)
{
- // 使用触摸拖动的完整实现
+ // 检查是否是双指手势
+ if (e.Manipulators.Count() >= 2)
+ {
+ // 双指手势时,不处理单个元素的手势,让画布级别的手势处理
+ // 这样可以实现图片与墨迹的同步移动
+ e.Handled = false;
+ return;
+ }
+
+ // 单指手势时,使用触摸拖动的完整实现
ApplyTouchManipulationTransform(element, e);
// 如果是图片元素,更新工具栏位置
diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
index f03b5cbc..8e9c40dc 100644
--- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
+++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs
@@ -1069,12 +1069,15 @@ namespace Ink_Canvas
catch { }
}
- ;
+ // 同时变换画布上的图片元素
+ TransformCanvasImages(m);
}
else
{
foreach (var stroke in inkCanvas.Strokes) stroke.Transform(m, false);
- ;
+
+ // 同时变换画布上的图片元素
+ TransformCanvasImages(m);
}
foreach (var circle in circles)
@@ -1092,6 +1095,86 @@ namespace Ink_Canvas
}
}
+ ///
+ /// 变换画布上的图片元素,使其与墨迹同步移动
+ ///
+ private void TransformCanvasImages(Matrix matrix)
+ {
+ try
+ {
+ // 遍历inkCanvas的所有子元素,找到图片元素
+ for (int i = inkCanvas.Children.Count - 1; i >= 0; i--)
+ {
+ var child = inkCanvas.Children[i];
+
+ if (child is Image image)
+ {
+ // 应用矩阵变换到图片
+ ApplyMatrixTransformToImage(image, matrix);
+ }
+ else if (child is MediaElement mediaElement)
+ {
+ // 对媒体元素也应用变换
+ ApplyMatrixTransformToMediaElement(mediaElement, matrix);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"变换画布图片失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ ///
+ /// 对图片应用矩阵变换
+ ///
+ private void ApplyMatrixTransformToImage(Image image, Matrix matrix)
+ {
+ try
+ {
+ // 获取图片的RenderTransform,如果不存在则创建新的TransformGroup
+ TransformGroup transformGroup = image.RenderTransform as TransformGroup;
+ if (transformGroup == null)
+ {
+ transformGroup = new TransformGroup();
+ image.RenderTransform = transformGroup;
+ }
+
+ // 创建新的MatrixTransform并添加到变换组
+ var matrixTransform = new MatrixTransform(matrix);
+ transformGroup.Children.Add(matrixTransform);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"应用图片变换失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
+ ///
+ /// 对媒体元素应用矩阵变换
+ ///
+ private void ApplyMatrixTransformToMediaElement(MediaElement mediaElement, Matrix matrix)
+ {
+ try
+ {
+ // 获取媒体元素的RenderTransform,如果不存在则创建新的TransformGroup
+ TransformGroup transformGroup = mediaElement.RenderTransform as TransformGroup;
+ if (transformGroup == null)
+ {
+ transformGroup = new TransformGroup();
+ mediaElement.RenderTransform = transformGroup;
+ }
+
+ // 创建新的MatrixTransform并添加到变换组
+ var matrixTransform = new MatrixTransform(matrix);
+ transformGroup.Children.Add(matrixTransform);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.WriteLogToFile($"应用媒体元素变换失败: {ex.Message}", LogHelper.LogType.Error);
+ }
+ }
+
// 退出多指书写模式,恢复InkCanvas的TouchDown事件绑定
private void ExitMultiTouchModeIfNeeded()
{