fix:issue #185
This commit is contained in:
@@ -196,7 +196,16 @@ namespace Ink_Canvas
|
||||
{
|
||||
if (sender is FrameworkElement element)
|
||||
{
|
||||
// 使用触摸拖动的完整实现
|
||||
// 检查是否是双指手势
|
||||
if (e.Manipulators.Count() >= 2)
|
||||
{
|
||||
// 双指手势时,不处理单个元素的手势,让画布级别的手势处理
|
||||
// 这样可以实现图片与墨迹的同步移动
|
||||
e.Handled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// 单指手势时,使用触摸拖动的完整实现
|
||||
ApplyTouchManipulationTransform(element, e);
|
||||
|
||||
// 如果是图片元素,更新工具栏位置
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
/// <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事件绑定
|
||||
private void ExitMultiTouchModeIfNeeded()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user