我已经搜索了这方面的示例,但我遇到的那些似乎专注于更简单的东西,比如设置 InkCanvas DefaultDrawingAttributes,如宽度、高度、颜色等。似乎没有很多材料。
例如,如果我按住鼠标按钮,我可以看到它画线。如果我想绘制椭圆而不是线条,或者在线条起点和终点之间的采样点周围绘制椭圆怎么办?
我知道我可以通过 StrokeCollected 活动获得新积分,但除此之外我不知道该去哪里。这家伙似乎让 msdn 的代码正常工作,但我做不到。我只知道如何使用 XAML 构建接口,而且似乎也没有示例。
编辑
创建了一个名为 thisIsNotNice 的 StrokeCollection 类变量,在构造函数中初始化并执行以下操作:
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
myInkCanvas.Strokes = thisIsNotNice;
foreach (StylusPoint p in e.Stroke.StylusPoints)
{
StylusPointCollection spc = new StylusPointCollection();
spc.Add(p);
Stroke s = new Stroke(spc);
s.DrawingAttributes.Height = 3;
s.DrawingAttributes.Width = 3;
thisIsNotNice.Add(s);
}
e.Handled = true;
}
但它不能正常工作。椭圆都画好了,但是鼠标画的线还在。此外,由于某种原因,它第一次正常工作,只绘制椭圆,但之后它同时绘制椭圆和线条。但是,如果我这样做:
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
myInkCanvas.Strokes = new System.Windows.Ink.StrokeCollection();
e.Handled = true;
}
线条不会保留在屏幕上。所以,我不明白为什么它们没有在上面的代码中被删除。
如果我这样做:
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
foreach (Stroke s in myInkCanvas.Strokes)
System.Diagnostics.Trace.WriteLine(s);
e.Handled = true;
}
我还可以看到画布包含线条笔触。
虽然在将笔画添加到集合后擦除笔画远非理想,但它至少可以满足我的要求。我可以将线条颜色设置为与背景相同,但是我将无法仅检索椭圆。我也可以将它们复制到单独的集合中,但这太糟糕了。