现在开发使用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 信息)
断点截图
复制粘贴后的效果图
请各位大侠帮小弟分析一下,是什么原因。要怎么完成这个复制粘贴的功能。高分揭帖
相关推荐
在这个例子中,InkCanvas允许用户在其上方绘制红色的墨迹,并且包含一个图片元素,该图片的位置通过InkCanvas.Left和InkCanvas.Top属性进行定位。InkCanvas还可以接收和存储墨迹数据,方便后续的编辑和回放。 总的...
1. **自定义选中后的界面**: 通过获取AdornerLayer并重写Adorner,可以自定义选中笔划时的视觉效果,例如改变边框、高亮或者显示额外的控制点。 2. **动态渲染**: 用户可以利用DynamicRenderer类来自定义墨迹的渲染...
InkCanvas是WPF提供的一种用于手写和绘图的控件,它允许用户使用鼠标或触笔进行自由绘画,并且支持多种图形元素的绘制。 首先,我们来看一下提供的XAML代码。在这个示例中,我们创建了一个窗口(Window)包含了两个...
我们首先在`StylusDown`事件中记录起点,并在`StylusUp`事件中记录终点,然后创建一个Line对象,设置其样式(如颜色和粗细),并将线段的两个端点设置为起点和终点,最后将线段添加到InkCanvas的子元素列表中。...
InkCanvas将每个笔触视为InkPresenter下的独立UI元素,这样可以方便地进行编辑和操作。 **InkCanvas的主要特性** 1. **墨迹绘制**: 用户可以直接在InkCanvas上绘制,其内置的手势识别系统能准确地捕捉到笔触的起点...
`InkCanvas`被放置在一个Grid中,以便我们可以轻松地添加其他UI元素并进行布局管理。 接下来,我们关注`MainWindow.xaml.cs`文件,这里包含了窗体的逻辑代码。为了实现画板的缩放和移动,我们需要添加一些事件处理...
- InkCanvas是WPF中的一个UI元素,它继承自Canvas,因此具备Canvas的所有布局特性,如绝对定位子元素。 - InkCanvas的主要功能是收集并显示用户的墨迹(ink)输入,这些输入可以是笔、鼠标或其他输入设备产生的...
同时,可能还包含了对选中形状的额外操作,如剪切、复制、粘贴或删除。 总之,通过自定义绘制InkCanvas,我们可以为用户提供更丰富的交互体验,创建符合特定需求的绘图应用。在这个过程中,理解并掌握WPF的事件处理...
3. **复制、剪切、粘贴和删除**:InkCanvas支持基本的编辑操作,如复制、剪切、粘贴和删除选定的墨迹。这些操作可以通过标准的剪贴板API实现,例如Copy命令会将选定的墨迹添加到剪贴板,Paste命令则从剪贴板中恢复...
Adorner是一种UI元素,可以用来装饰或者增强其他UI元素,如添加边框、阴影或者高亮等。在这个场景下,我们将创建一个自定义的Adorner,用于显示可拖动的选择框,以便用户能圈选出想要移动的笔画。 1. **创建Adorner...
与其他WPF控件一样,`InkCanvas` 可以嵌套其他元素,如图片、文本框等。这使得开发者可以在手绘内容中集成其他丰富的UI元素。 **6. 事件处理** `InkCanvas` 提供了多种事件,如`StylusDown`(笔按下)、`StylusUp`...
首先,我们需要在XAML文件中添加一个InkCanvas元素。这将作为我们的画布,用户可以在上面进行绘图操作: ```xml <InkCanvas x:Name="inkCanvas" Background="White" /> ``` 接着,我们要创建一系列的Pen对象,用于...
《InkCanvas撤销恢复功能详解》 InkCanvas是Windows Presentation Foundation(WPF)框架中的一个强大组件,专为手写输入和绘图设计。它提供了丰富的交互式绘图环境,用户可以使用鼠标或触控设备进行自由绘画。在...
在Windows Presentation Foundation (WPF) 中,`InkCanvas` 是一个非常有用的控件,它允许用户通过鼠标或触控设备进行手写输入和绘制图形。这个控件提供了丰富的功能,使得开发者能够创建具有交互性绘画功能的应用...
**WPF经典教程之Canvas布局** Canvas是WPF中一种特殊的...以上就是关于WPF中Canvas和InkCanvas布局的详细讲解,以及与之相关的WPF基础知识。学习这些内容可以帮助开发者更好地理解和创建具有高级功能的WPF用户界面。
在Windows Presentation Foundation (WPF) 中,InkCanvas是一个专门用于手写输入和绘图的控件。这个控件能够捕捉鼠标或触摸设备的输入,将它们转化为墨迹(ink)绘制到画布上,提供了丰富的绘图和交互功能。在标题...
《inkcanvas实例详解:入门与实践》 InkCanvas是WPF(Windows Presentation Foundation)框架中的一个控件,主要用于接收并展示用户的手写输入。它为用户提供了一个画布,可以在上面绘制、擦除和编辑图形,是实现...
wpf模拟毛笔写字的,研究了一个多星期,发现这东西没我原来想的那么 简单, 其实很复杂的,很多学校毕业生论文都是研究这个的,网上的资源也比较少, 有效果的效率又不高,效率高的没效果 自己弄了个简单的,先放...
1. **布局与嵌套**:InkCanvas作为容器控件,可以包含其他UI元素,如TextBlock、Button等。它会将这些元素放置在其绘图区域之上,不影响墨迹绘制。 2. **事件处理**:InkCanvas提供了几个关键的输入事件,如`...
《Inkcanvas墨迹绘制:探索C#中的数字签名与艺术创作》 Inkcanvas是Windows Presentation Foundation(WPF)框架中的一个控件,专为用户提供墨迹绘图功能。在VS2013这样的开发环境中,我们可以充分利用Inkcanvas来...