我已经搜索了这个例子,但我跑过的人似乎专注于更简单的东西,如设置InkCanvas DefaultDrawingAttributes,如宽度,高度,颜色等。似乎没有很多的材料这个。如何更改InkCanvas的绘制方式?
例如,如果我按住鼠标按钮,我可以看到它画线。如果我想绘制椭圆而不是线条,或者在线条的开始和结束之间围绕采样点绘制椭圆,该怎么办?
我知道我可以通过StrokeCollected事件获得新的点,但除此之外,我不知道要去哪里。 This guy好像他有msdn的代码工作,但我做不到。我只知道如何使用XAML来构建界面,而且似乎也没有样例。
编辑
创建一个StrokeCollection中类变量称为thisIsNotNice,在构造函数初始化,这样做:
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;
}
我也可以看到,在画布上包含行招。
虽然在添加到集合中后删除笔画并不理想,但它至少可以做我想要的。我可以将线条颜色设置为与背景相同,但是我不能仅检索这些椭圆。我可以将它们复制到一个单独的集合中,但这太糟糕了。