新增图片选择选项
This commit is contained in:
@@ -3,6 +3,7 @@ using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Ink_Canvas.Helpers;
|
||||
@@ -219,6 +220,152 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 克隆图片
|
||||
/// </summary>
|
||||
/// <param name="image">要克隆的图片</param>
|
||||
private void CloneImage(Image image)
|
||||
{
|
||||
if (image == null) return;
|
||||
|
||||
try
|
||||
{
|
||||
// 创建图片的副本
|
||||
var clonedImage = new Image
|
||||
{
|
||||
Source = image.Source,
|
||||
Width = image.Width,
|
||||
Height = image.Height,
|
||||
Stretch = image.Stretch,
|
||||
RenderTransform = image.RenderTransform?.Clone() as Transform
|
||||
};
|
||||
|
||||
// 设置位置,稍微偏移以避免重叠
|
||||
InkCanvas.SetLeft(clonedImage, InkCanvas.GetLeft(image) + 20);
|
||||
InkCanvas.SetTop(clonedImage, InkCanvas.GetTop(image) + 20);
|
||||
|
||||
// 添加鼠标事件处理,使图片可以被选择
|
||||
clonedImage.MouseDown += UIElement_MouseDown;
|
||||
clonedImage.IsManipulationEnabled = true;
|
||||
|
||||
// 添加到画布
|
||||
inkCanvas.Children.Add(clonedImage);
|
||||
|
||||
// 选择新克隆的图片
|
||||
DeselectUIElement();
|
||||
SelectUIElement(clonedImage);
|
||||
|
||||
// 提交到时间机器以支持撤销
|
||||
timeMachine.CommitElementInsertHistory(clonedImage);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 记录错误但不中断程序
|
||||
System.Diagnostics.Debug.WriteLine($"克隆图片时发生错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 克隆图片到新页面
|
||||
/// </summary>
|
||||
/// <param name="image">要克隆的图片</param>
|
||||
private void CloneImageToNewBoard(Image image)
|
||||
{
|
||||
if (image == null) return;
|
||||
|
||||
try
|
||||
{
|
||||
// 创建图片的副本
|
||||
var clonedImage = new Image
|
||||
{
|
||||
Source = image.Source,
|
||||
Width = image.Width,
|
||||
Height = image.Height,
|
||||
Stretch = image.Stretch,
|
||||
RenderTransform = image.RenderTransform?.Clone() as Transform
|
||||
};
|
||||
|
||||
// 设置位置,稍微偏移以避免重叠
|
||||
InkCanvas.SetLeft(clonedImage, InkCanvas.GetLeft(image) + 20);
|
||||
InkCanvas.SetTop(clonedImage, InkCanvas.GetTop(image) + 20);
|
||||
|
||||
// 添加鼠标事件处理,使图片可以被选择
|
||||
clonedImage.MouseDown += UIElement_MouseDown;
|
||||
clonedImage.IsManipulationEnabled = true;
|
||||
|
||||
// 创建新页面
|
||||
BtnWhiteBoardAdd_Click(null, null);
|
||||
|
||||
// 添加到新页面的画布
|
||||
inkCanvas.Children.Add(clonedImage);
|
||||
|
||||
// 选择新克隆的图片
|
||||
DeselectUIElement();
|
||||
SelectUIElement(clonedImage);
|
||||
|
||||
// 提交到时间机器以支持撤销
|
||||
timeMachine.CommitElementInsertHistory(clonedImage);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 记录错误但不中断程序
|
||||
System.Diagnostics.Debug.WriteLine($"克隆图片到新页面时发生错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 缩放图片
|
||||
/// </summary>
|
||||
/// <param name="image">要缩放的图片</param>
|
||||
/// <param name="scaleFactor">缩放因子(大于1为放大,小于1为缩小)</param>
|
||||
private void ScaleImage(Image image, double scaleFactor)
|
||||
{
|
||||
if (image == null) return;
|
||||
|
||||
try
|
||||
{
|
||||
// 获取当前的变换
|
||||
var transformGroup = image.RenderTransform as TransformGroup ?? new TransformGroup();
|
||||
|
||||
// 查找现有的缩放变换
|
||||
ScaleTransform scaleTransform = null;
|
||||
foreach (Transform transform in transformGroup.Children)
|
||||
{
|
||||
if (transform is ScaleTransform st)
|
||||
{
|
||||
scaleTransform = st;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有缩放变换,创建一个新的
|
||||
if (scaleTransform == null)
|
||||
{
|
||||
scaleTransform = new ScaleTransform();
|
||||
transformGroup.Children.Add(scaleTransform);
|
||||
}
|
||||
|
||||
// 设置缩放中心为图片中心
|
||||
scaleTransform.CenterX = image.ActualWidth / 2;
|
||||
scaleTransform.CenterY = image.ActualHeight / 2;
|
||||
|
||||
// 应用缩放因子
|
||||
scaleTransform.ScaleX *= scaleFactor;
|
||||
scaleTransform.ScaleY *= scaleFactor;
|
||||
|
||||
// 应用变换
|
||||
image.RenderTransform = transformGroup;
|
||||
|
||||
// 提交到时间机器以支持撤销
|
||||
// 注意:缩放操作目前不支持撤销,因为需要更复杂的历史记录机制
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 记录错误但不中断程序
|
||||
System.Diagnostics.Debug.WriteLine($"缩放图片时发生错误: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除图片
|
||||
/// </summary>
|
||||
|
||||
@@ -166,6 +166,7 @@ namespace Ink_Canvas {
|
||||
}
|
||||
}
|
||||
|
||||
// ... existing code ...
|
||||
private void ImageRotate45_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||
if (lastBorderMouseDownObject != sender) return;
|
||||
|
||||
@@ -179,7 +180,7 @@ namespace Ink_Canvas {
|
||||
center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点
|
||||
|
||||
// Update matrix to reflect translation/rotation
|
||||
m.RotateAt(45, center.X, center.Y); // 旋转
|
||||
m.RotateAt(45, center.X, center.Y); // 顺时针旋转45度
|
||||
|
||||
var targetStrokes = inkCanvas.GetSelectedStrokes();
|
||||
foreach (var stroke in targetStrokes) stroke.Transform(m, false);
|
||||
@@ -471,7 +472,7 @@ namespace Ink_Canvas {
|
||||
|
||||
// 图片工具栏相关
|
||||
private Border borderImageSelectionControl;
|
||||
private double BorderImageSelectionControlWidth = 150.0; // 3个按钮 + 分隔线的实际宽度
|
||||
private double BorderImageSelectionControlWidth = 490.0; // 6个按钮 + 分隔线的实际宽度
|
||||
private double BorderImageSelectionControlHeight = 80.0;
|
||||
|
||||
// 元素变化监听相关
|
||||
|
||||
Reference in New Issue
Block a user