0 0

关于inkcanvas 选中元素复制粘贴问题10


现在开发使用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 信息)

断点截图

复制粘贴后的效果图
 
请各位大侠帮小弟分析一下,是什么原因。要怎么完成这个复制粘贴的功能。高分揭帖

 

2014年4月10日 14:58
目前还没有答案

相关推荐

Global site tag (gtag.js) - Google Analytics