2017-04-09 92 views
1

考虑在UWP应用程序,这是一个网格内的唯一元素(省略了简洁)何保持InkCanvas招内InkCanvas在UWP

<InkCanvas x:Name="inkCanvas" Width="500" Height="500"/> 

绘制其某处开始InkCanvas内中风以下InkCanvas并延长InkCanvas边界之外的中风。从视觉上来说,您会觉得笔画在边界处结束(例如在InkCanvas的右边缘)。但是这是错误的。通过按钮调整InkCanvas的大小,例如

private void SizeButton_Click(object sender, RoutedEventArgs e) 
    { 
    inkCanvas.Width = 2000; 
    inkCanvas.Height = 2000; 
    } 

并且您将看到在InkCanvas外部绘制的笔画部分。 如果您将笔画保存为GIF或ISF,无论是否调整大小,这部分都将显示出来,这非常不幸。在Windows Store中有几个具有墨迹功能的应用程序存在此问题。

问题:为什么是这样的,我们该如何避免它?

回答

2

我曾在InkCanvas之前与团队合作制作墨水软件,并且遇到了同样的问题。 “当用户将笔拖到矩形区域并允许他们进行书写时,我们该怎么办?”我们最终得出了与InkCanvas一样的结论,这是保持路径的。

这个决定的原因是在尝试&错误后出现的。

我们尝试剪切路径,即将其切断,并与边缘相交。但是我们遇到了一个问题,即用户将笔从盒子里拿出来,但随后又回来了。把它想象成一个签名框。我们给用户一个虚线区域,他们可以用数字签名,但几乎每个人都有一个夸张的签名,离开了虚线区域的边界。我们无法裁剪,因为我们实际上会失去签名的重要部分。

我们也试图捕捉到边缘的路径。当用户在盒子外面拖动时,墨水会沿着该区域的边缘垂直或水平对齐。至少通过这种方法,用户可以即时获得在区域外拖动时发生的反馈。这太可怕了。糟糕的用户体验以及大量的讨厌邮件。

所以......我们离开了它。该方框不会以任何方式影响墨迹。

现在,以帮助你与你的情况。如果要剪裁路径,可以使用Win2D将累积的墨迹笔触转换为几何图形,并与具有与InkCanvas(500x500)相同尺寸的矩形几何图形相交。如果你对这个方向感兴趣,Mike Taulty has a post about this。我不确定的唯一的事情是,如果你可以采取最后修剪几何,并将其转换回InkStroke。这可能是单向操作。你必须挖掘它。

+0

Laith感谢这个信息。我会仔细研究一下,看看我能做些什么。与此同时,如果您能对以下问题发表评论,如果您有时间,并且与当前主题有相似之处(但与众不同),我将不胜感激http://stackoverflow.com/questions/43280886/inkcanvas-strokes-没有适当的界限 - 当切换pc。 – Octopus