在UWP应用程序上考虑以下InkCanvas,这是Grid中唯一的元素(为简洁而省略)
<InkCanvas x:Name="inkCanvas" Width="500" Height="500"/>
绘制一个从InkCanvas内部开始的笔划,并在InkCanvas边界之外延长笔划。在视觉上,您会产生一种印象,即笔划在边界处结束(例如,在InkCanvas的右边缘)。但是这是错误的。通过按钮调整InkCanvas的大小,例如
private void SizeButton_Click(object sender, RoutedEventArgs e)
{
inkCanvas.Width = 2000;
inkCanvas.Height = 2000;
}
您将看到在InkCanvas之外绘制的笔划部分。 如果您将笔划保存为gif或isf(无论是否调整大小),此部分也将可见,这是非常不幸的。在Windows商店中有几个具有墨水功能的应用程序存在这个问题。
问题:为什么会这样,我们怎样才能避免呢?
答案 0 :(得分:2)
我在InkCanvas
来到现场前与团队一起制作软件,我们遇到了同样的问题。 &#34;当用户将笔拖到允许墨水的矩形区域之外时,我们该怎么做?&#34;我们最终得出与InkCanvas
相同的结论,这是保持路径。
这个决定的原因是在经过一番试验后得出的。错误。
我们尝试剪切路径,即将其切割到与边缘相交的位置。但是我们遇到了一个问题,即用户在盒子外面运行笔,但后来又回到同一个笔画中。把它想象成一个签名盒子。我们给了用户一个虚线区域,他们可以在这里进行数字签名,但几乎每个人都有一个夸张的签名,这些签名离开了虚线区域的边界。我们无法剪辑,因为我们实际上会失去签名的重要部分。
我们还试图捕捉到边缘的路径。当用户在框外拖动时,墨水将沿着区域的边缘垂直或水平地捕捉。至少通过这种方法,用户可以获得在区域外拖动时会发生什么的即时反馈。这太可怕了。糟糕的用户体验和许多仇恨邮件。
所以......我们一个人待着。该框不会以任何方式影响墨迹。
现在,帮助您解决问题。如果要剪切路径,可以使用Win2D将累积的墨迹笔划转换为几何图形,并将其与具有与InkStroke
(500x500)相同大小的矩形几何图形相交。如果您对该方向感兴趣,Mike Taulty has a post about this。我唯一不确定的是你是否可以拍摄最终剪裁的几何体并将其转换回{{1}}。这可能是单向操作。你必须深入挖掘它。