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
目前还没有答案

相关推荐

    Canvas、InkCanvas布局

    在这个例子中,InkCanvas允许用户在其上方绘制红色的墨迹,并且包含一个图片元素,该图片的位置通过InkCanvas.Left和InkCanvas.Top属性进行定位。InkCanvas还可以接收和存储墨迹数据,方便后续的编辑和回放。 总的...

    WPF中InkCanvas控件详细介绍

    1. **自定义选中后的界面**: 通过获取AdornerLayer并重写Adorner,可以自定义选中笔划时的视觉效果,例如改变边框、高亮或者显示额外的控制点。 2. **动态渲染**: 用户可以利用DynamicRenderer类来自定义墨迹的渲染...

    WPF InkCanvas绘制矩形和椭圆

    InkCanvas是WPF提供的一种用于手写和绘图的控件,它允许用户使用鼠标或触笔进行自由绘画,并且支持多种图形元素的绘制。 首先,我们来看一下提供的XAML代码。在这个示例中,我们创建了一个窗口(Window)包含了两个...

    WPF中InkCanvas画图

    我们首先在`StylusDown`事件中记录起点,并在`StylusUp`事件中记录终点,然后创建一个Line对象,设置其样式(如颜色和粗细),并将线段的两个端点设置为起点和终点,最后将线段添加到InkCanvas的子元素列表中。...

    WPF,inKCanvas 左面绘画程序源代码

    InkCanvas将每个笔触视为InkPresenter下的独立UI元素,这样可以方便地进行编辑和操作。 **InkCanvas的主要特性** 1. **墨迹绘制**: 用户可以直接在InkCanvas上绘制,其内置的手势识别系统能准确地捕捉到笔触的起点...

    WPF 使用InkCanvas实现画板的缩放以及移动Demo

    `InkCanvas`被放置在一个Grid中,以便我们可以轻松地添加其他UI元素并进行布局管理。 接下来,我们关注`MainWindow.xaml.cs`文件,这里包含了窗体的逻辑代码。为了实现画板的缩放和移动,我们需要添加一些事件处理...

    WPF涂鸦控件InkCanvas示例

    - InkCanvas是WPF中的一个UI元素,它继承自Canvas,因此具备Canvas的所有布局特性,如绝对定位子元素。 - InkCanvas的主要功能是收集并显示用户的墨迹(ink)输入,这些输入可以是笔、鼠标或其他输入设备产生的...

    WPF自定义绘制InkCanvas

    同时,可能还包含了对选中形状的额外操作,如剪切、复制、粘贴或删除。 总之,通过自定义绘制InkCanvas,我们可以为用户提供更丰富的交互体验,创建符合特定需求的绘图应用。在这个过程中,理解并掌握WPF的事件处理...

    WPF中InkCanvas(墨水面板)用法

    3. **复制、剪切、粘贴和删除**:InkCanvas支持基本的编辑操作,如复制、剪切、粘贴和删除选定的墨迹。这些操作可以通过标准的剪贴板API实现,例如Copy命令会将选定的墨迹添加到剪贴板,Paste命令则从剪贴板中恢复...

    WPF InkCanvas笔画圈选移动功能

    Adorner是一种UI元素,可以用来装饰或者增强其他UI元素,如添加边框、阴影或者高亮等。在这个场景下,我们将创建一个自定义的Adorner,用于显示可拖动的选择框,以便用户能圈选出想要移动的笔画。 1. **创建Adorner...

    InkCanvas WPF

    与其他WPF控件一样,`InkCanvas` 可以嵌套其他元素,如图片、文本框等。这使得开发者可以在手绘内容中集成其他丰富的UI元素。 **6. 事件处理** `InkCanvas` 提供了多种事件,如`StylusDown`(笔按下)、`StylusUp`...

    InkCanvas-WPF.rar

    首先,我们需要在XAML文件中添加一个InkCanvas元素。这将作为我们的画布,用户可以在上面进行绘图操作: ```xml <InkCanvas x:Name="inkCanvas" Background="White" /> ``` 接着,我们要创建一系列的Pen对象,用于...

    InkCanvas Undo Redo

    《InkCanvas撤销恢复功能详解》 InkCanvas是Windows Presentation Foundation(WPF)框架中的一个强大组件,专为手写输入和绘图设计。它提供了丰富的交互式绘图环境,用户可以使用鼠标或触控设备进行自由绘画。在...

    inkcanvas 绘制图形

    在Windows Presentation Foundation (WPF) 中,`InkCanvas` 是一个非常有用的控件,它允许用户通过鼠标或触控设备进行手写输入和绘制图形。这个控件提供了丰富的功能,使得开发者能够创建具有交互性绘画功能的应用...

    WPF经典教程之Canvas、InkCanvas布局

    **WPF经典教程之Canvas布局** Canvas是WPF中一种特殊的...以上就是关于WPF中Canvas和InkCanvas布局的详细讲解,以及与之相关的WPF基础知识。学习这些内容可以帮助开发者更好地理解和创建具有高级功能的WPF用户界面。

    wpf下inkcanvas实现画板

    在Windows Presentation Foundation (WPF) 中,InkCanvas是一个专门用于手写输入和绘图的控件。这个控件能够捕捉鼠标或触摸设备的输入,将它们转化为墨迹(ink)绘制到画布上,提供了丰富的绘图和交互功能。在标题...

    很好的inkcanvas实例(入门级)

    《inkcanvas实例详解:入门与实践》 InkCanvas是WPF(Windows Presentation Foundation)框架中的一个控件,主要用于接收并展示用户的手写输入。它为用户提供了一个画布,可以在上面绘制、擦除和编辑图形,是实现...

    使用WPF的自定义InkCanvas实现毛笔效果

    wpf模拟毛笔写字的,研究了一个多星期,发现这东西没我原来想的那么 简单, 其实很复杂的,很多学校毕业生论文都是研究这个的,网上的资源也比较少, 有效果的效率又不高,效率高的没效果 自己弄了个简单的,先放...

    wpf-inkcanvas应用实战

    1. **布局与嵌套**:InkCanvas作为容器控件,可以包含其他UI元素,如TextBlock、Button等。它会将这些元素放置在其绘图区域之上,不影响墨迹绘制。 2. **事件处理**:InkCanvas提供了几个关键的输入事件,如`...

    Inkcanvas 墨迹绘制

    《Inkcanvas墨迹绘制:探索C#中的数字签名与艺术创作》 Inkcanvas是Windows Presentation Foundation(WPF)框架中的一个控件,专为用户提供墨迹绘图功能。在VS2013这样的开发环境中,我们可以充分利用Inkcanvas来...

Global site tag (gtag.js) - Google Analytics