この例を検索しましたが、遭遇したものは、Width、Height、Color などの 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;
}
また、キャンバスに線画が含まれていることもわかります。
コレクションに追加された後にストロークを消去することは理想とはほど遠いですが、少なくとも私が望むことはできます. 線の色を背景と同じにすることはできますが、楕円だけを取得することはできません。それらを別のコレクションにコピーすることもできますが、それはひどいものです。