现在开发使用WPF的inkcanvas做画板功能,其中有个功能是要求将inkcanvas中选中的元素进行复制粘贴。
曲线或者直线进行选中、复制、粘贴时一切正常。
对于通过两个StylusPoints运算得到的其他点再画出来的图像,进行复制、粘贴时,显示出来的是一条直线。
以左箭头为例:
1、我先通过inkcanvas获取到了两个点,再通过运算算出画左箭头时用到的其他点的元素;代码如下
protected override void DrawCore(DrawingContext drawingContext, DrawingAttributes drawingAttributes) { if (drawingContext == null) { throw new ArgumentNullException("drawingContext"); } if (null == drawingAttributes) { throw new ArgumentNullException("drawingAttributes"); } Pen pen = new Pen { StartLineCap = PenLineCap.Flat, EndLineCap = PenLineCap.Flat, Brush = new SolidColorBrush(drawingAttributes.Color), }; pen.Thickness = drawingAttributes.Width; Rect r = new Rect( new Point(StylusPoints[0].X, StylusPoints[0].Y), new Point(StylusPoints[1].X, StylusPoints[1].Y)); Brush bs = new SolidColorBrush(Colors.White); PathFigure pathFigure = new PathFigure { IsClosed = true };//起点与终点闭合 //根据inkcanvas获取到的两个StylusPoints,计算其他左箭头的点坐标 pathFigure.StartPoint = new Point((StylusPoints[0].X + StylusPoints[1].X) / 2, StylusPoints[0].Y); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[1].X, (StylusPoints[0].Y + StylusPoints[1].Y) / 2) }); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[0].X+(StylusPoints[1].X - StylusPoints[0].X) / 4 * 3, (StylusPoints[0].Y + StylusPoints[1].Y) / 2) }); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[0].X+(StylusPoints[1].X - StylusPoints[0].X) / 4 * 3, StylusPoints[1].Y) }); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[0].X+(StylusPoints[1].X - StylusPoints[0].X) / 4, StylusPoints[1].Y) }); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[0].X + (StylusPoints[1].X - StylusPoints[0].X) / 4, (StylusPoints[1].Y + StylusPoints[0].Y) / 2) }); pathFigure.Segments.Add(new LineSegment { Point = new Point(StylusPoints[0].X, (StylusPoints[0].Y + StylusPoints[1].Y) / 2) }); PathGeometry pathGeometry = new PathGeometry(); pathGeometry.Figures.Add(pathFigure); drawingContext.DrawGeometry(bs, pen, pathGeometry); }
2.在inkcanvas中,用select模式将左箭头的图形选中
3.用inkcanvas的CopySelection()方法将图形复制
4.用inkcanvas中的Paste()方法将图形粘贴到画板中
通过以上操作,复制出来的结果是一条从起点到终点的一条直线(即之前获取到的两个StylusPoints 点之前的一条直线,断点跟踪时,选中元素的StylusPointsCollection里面,也是只有这两个StylusPoints 信息)
断点截图
复制粘贴后的效果图
请各位大侠帮小弟分析一下,是什么原因。要怎么完成这个复制粘贴的功能。高分揭帖
相关推荐
).Canvas、InkCanvas布局).Canvas、InkCanvas布局
主要为大家详细介绍了WPF InkCanvas绘制矩形和椭圆,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
WPF中InkCanvas控件详细介绍,包括其基本属性和扩展应用等。DEMO代码请联系博客:http://blog.sina.com.cn/ggyd
WPF 使用InkCanvas实现画板的缩放以及移动 教程的小demo
利用WPF中的InkCanvas编写的鼠标拖动绘制图形的功能
收集的一些 inkcanvas中图形绘制方法(直线、虚线、箭头、圆、矩形、三角形、五边形、六边形、五角星) ,箭头和虚线绘制存在一些问题,可以使用
InkCanvas Undo Redo 有撤销恢复等功能()
vs2010内使用WPF的InkCanvas控件内画图,可以画直线,虚线,箭头,矩形,椭圆,三角形
InkCanvas ..................
wpf模拟毛笔写字的,研究了一个多星期,发现这东西没我原来想的那么 简单, 其实很复杂的,很多学校毕业生论文都是研究这个的,网上的资源也比较少, 有效果的效率又不高,效率高的没效果 自己弄了个简单的,先放...
转载用inkcanvas 实现的简单画板源代码 有绘图、擦除等多种功能 对inkcanvas感兴趣的可以好好研究下 通过改写代码可以实现更多功能!
WPF inkCanvas实现画板功能,画直线,箭头直线,虚线,三角形,圆形,长方形,平行四边形,并可以改变图形背景色和边框色
C#写的WPF涂鸦控件InkCanvas的使用示例,可以涂鸦、擦除、选择等,还有一个FashEyePanel效果
WPF,inkCavans桌面绘画程序源代码
由本人二次开发得,值得学习研究,有益于对 WPF 中InkCanvas控件的理解 软件原开发者信息未修改,本人只是优化了书写效率,修正了一些异常
此demo拥有的功能:保存,打开,选定,复制、剪切、粘贴或删除选定的对象,橡皮擦,笔迹颜色、粗细...
在WPF中子元素的绝对定位的布局控件 其子元素使用Width、Height定义元素的宽度和高度 使用Convas.Left(Convas.Right)、Convas.Top(Convas.Bottom)定义与Convas容器的相对位置..... (更多资源:...
本实例主要介绍 inkcanvas的使用技巧,入门级代码。
inkcanvas应用实战
项目开发需要,用到了WPF原生提供的InkCanvas控件,也有叫水墨控件。 需要开发的功能为鼠标光标随意圈选笔画,选中完成后移动圈选的笔画到画布其他地方,本人原创代码,供参考!