J'ai cherché des exemples pour cela, mais ceux que j'ai parcourus semblent se concentrer sur des choses plus simples comme la définition des DefaultDrawingAttributes d'InkCanvas telles que Largeur, Hauteur, Couleur, etc .. Il ne semble pas y avoir beaucoup de matériel ce. Par exemple, si je maintiens le bouton de la souris enfoncé, je peux voir les lignes de dessin. Que faire si je veux dessiner des ellipses au lieu de lignes, ou dessiner des ellipses autour de points échantillonnés entre le début et la fin de la ligne?Comment puis-je modifier la manière dont dessine InkCanvas?
Je sais que je peux obtenir de nouveaux points avec l'événement StrokeCollected, mais au-delà je n'ai aucune idée de l'endroit où aller. This guy semblait avoir le code de msdn, mais je ne pouvais pas le faire. Je ne sais comment construire l'interface en utilisant XAML, et il ne semble pas y avoir d'échantillon non plus.
modifier
créé une variable de classe StrokeCollection appelée thisIsNotNice, initialisé dans le constructeur et a fait cela:
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;
}
Mais cela ne fonctionne pas comme il se doit. Les ellipses sont dessinées, mais les lignes dessinées par la souris sont toujours là. Aussi, pour une raison quelconque, la première fois que cela fonctionne comme il se doit, en ne dessinant que les ellipses, mais ensuite il dessine à la fois les ellipses et les lignes. Mais, si je le fais à la place:
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
myInkCanvas.Strokes = new System.Windows.Ink.StrokeCollection();
e.Handled = true;
}
Les lignes ne sont pas conservées à l'écran. Donc, je ne comprends pas pourquoi ils ne sont pas effacés dans le code ci-dessus.
Si je fais ceci:
private void InkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
foreach (Stroke s in myInkCanvas.Strokes)
System.Diagnostics.Trace.WriteLine(s);
e.Handled = true;
}
Je peux aussi voir que la toile contient les traits de ligne. Alors que l'effacement des traits après qu'ils ont été ajoutés à la collection est loin d'être idéal, il fait au moins ce que je veux. Je pourrais configurer la couleur de la ligne pour qu'elle soit la même que celle de l'arrière-plan, mais je ne serais pas capable de récupérer uniquement les ellipses. Je pourrais aussi les copier dans une collection séparée, mais c'est vraiment horrible.