fix:issue #185
This commit is contained in:
@@ -196,7 +196,16 @@ namespace Ink_Canvas
|
|||||||
{
|
{
|
||||||
if (sender is FrameworkElement element)
|
if (sender is FrameworkElement element)
|
||||||
{
|
{
|
||||||
// 使用触摸拖动的完整实现
|
// 检查是否是双指手势
|
||||||
|
if (e.Manipulators.Count() >= 2)
|
||||||
|
{
|
||||||
|
// 双指手势时,不处理单个元素的手势,让画布级别的手势处理
|
||||||
|
// 这样可以实现图片与墨迹的同步移动
|
||||||
|
e.Handled = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 单指手势时,使用触摸拖动的完整实现
|
||||||
ApplyTouchManipulationTransform(element, e);
|
ApplyTouchManipulationTransform(element, e);
|
||||||
|
|
||||||
// 如果是图片元素,更新工具栏位置
|
// 如果是图片元素,更新工具栏位置
|
||||||
|
|||||||
@@ -1069,12 +1069,15 @@ namespace Ink_Canvas
|
|||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
// 同时变换画布上的图片元素
|
||||||
|
TransformCanvasImages(m);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
foreach (var stroke in inkCanvas.Strokes) stroke.Transform(m, false);
|
foreach (var stroke in inkCanvas.Strokes) stroke.Transform(m, false);
|
||||||
;
|
|
||||||
|
// 同时变换画布上的图片元素
|
||||||
|
TransformCanvasImages(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var circle in circles)
|
foreach (var circle in circles)
|
||||||
@@ -1092,6 +1095,86 @@ namespace Ink_Canvas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 变换画布上的图片元素,使其与墨迹同步移动
|
||||||
|
/// </summary>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 对图片应用矩阵变换
|
||||||
|
/// </summary>
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 对媒体元素应用矩阵变换
|
||||||
|
/// </summary>
|
||||||
|
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事件绑定
|
// 退出多指书写模式,恢复InkCanvas的TouchDown事件绑定
|
||||||
private void ExitMultiTouchModeIfNeeded()
|
private void ExitMultiTouchModeIfNeeded()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user