C# 自定义InkCanvas(MSDN代码示例无法正常工作)
我想在InkCanvas中使用自定义笔刷 它们是来自MSDN的代码片段。() 如果我使用该代码并快速移动鼠标,我会在画笔之间获得空间(椭圆): 我的问题当然是如何解决这个问题,但我也很好奇为什么会发生这种情况(我想从中学习),我认为可能我做错了什么,但即使我剪切/粘贴了正在发生的示例 阅读代码时我注意到的一点是CustomStroke类中的注释C# 自定义InkCanvas(MSDN代码示例无法正常工作),c#,wpf,inkcanvas,C#,Wpf,Inkcanvas,我想在InkCanvas中使用自定义笔刷 它们是来自MSDN的代码片段。() 如果我使用该代码并快速移动鼠标,我会在画笔之间获得空间(椭圆): 我的问题当然是如何解决这个问题,但我也很好奇为什么会发生这种情况(我想从中学习),我认为可能我做错了什么,但即使我剪切/粘贴了正在发生的示例 阅读代码时我注意到的一点是CustomStroke类中的注释 // Draw linear gradient ellipses between // all the StylusPoints in the Str
// Draw linear gradient ellipses between
// all the StylusPoints in the Stroke
在我看来,它应该在点之间画椭圆,而不仅仅是在点上
我正在使用C#NET
简而言之:
- 为什么会这样
- 帮我修一下:)
如何解决这个问题:使用平板电脑-平板电脑上的数字化仪每秒的输入数量要高得多,因此更难遇到或填补空白-基本上是基于以前的点(可能是贝塞尔曲线)进行估计 为什么会发生这种情况 示例中的自定义InkCanvas在每个收集的笔划点绘制椭圆,但不尝试在它们之间绘制直线。标准InkCanvas控件通过在给定的点之间绘制线来实现。这就是为什么示例中的定制InkCanvas实现留下了空白,而内置实现没有 如何“修复”它 自定义代码可以很容易地扩展到不留间隙:除了在每个点绘制椭圆外,它还可以在每对点之间绘制直线 可以在绘制椭圆的代码之前添加绘制连接线的代码,如下所示:
// Draw connecting lines
var geo = new StreamGeometry();
using(geoContext = geo.Open())
{
geoContext.StartFigure(stylusPoints[0], false, false);
geoContext.PolyLineTo(stylusPoints.Skip(1).Cast<Point>(), true, false);
}
drawingContext.DrawGeometry(null, connectingLinePen, geo);
// Draw ellipses
for(int i = 1; i < stylusPoints.Count; i++)
{
... etc ...
//绘制连接线
var geo=新的StreamGeometry();
使用(geoContext=geo.Open())
{
geoContext.StartFigure(stylusPoints[0],false,false);
PolyLineTo(stylusPoints.Skip(1.Cast(),true,false);
}
drawingContext.DrawGeometry(null,ConnectionLinePen,geo);
//画椭圆
对于(int i=1;i
此代码的工作原理是构造多段线StreamGeometry,然后将其绘制到上下文中。在此上下文中使用StreamGeometry通常比使用多段线创建PathGeometry或直接在drawingCanvas上执行一系列DrawLine调用更有效
注意:使用更好的数字化仪无法解决根本问题,即定制InkCanvas实际上设计为仅显示采样点处的数据,而不是采样点之间的数据。ReDAeR
看这个
好的,但为什么只有在我使用自定义InkCanvas时才会发生这种情况?常规InkCanvas的工作原理与预期一致谢谢,它现在正在工作。我只需要添加一条线将点连接在一起。