01.インクを使用する
InkCanvas コントロールで絵を描ける(インクを使用する)ようにするには、EditingMode プロパティの設定をする必要があります。
EditingMode プロパティには InkCanvasEditingMode 列挙体の値を指定します。インク(描画用のペン)を使用する場合は、InkCanvasEditingMode.Ink を指定します。
参考までに、InkCanvasEditingMode 列挙体を下記に示します。
| メンバ名 | 説明 |
| None | ペンがInkCanvasにデータを送信する際、アクションが実行されません |
| Ink | インクで線を描画できるようにします |
| GestureOnly | InkCanvas上でペンがどのように動いたのかを認識しますが、線は描画されません |
| InkAndGesture | ペンが動いたとおりに軌跡が描かれますが、キャンバスからペンを離すと軌跡が消えます。InkCanvasはペンがどのように動いたのかを認識します。 |
| Select | 描画されている線を選択することができます |
| EraseByPoint | ペンが線に交差したときに、交差した部分を消去します |
| EraseByStroke | ペンが交差した線全体を消去します。 |
下記は InkCanvasで線を描けるように、EditinMode に InkCanvasEditingMode.Ink を設定する例です。

<InkCanvas EditingMode="Ink" Name="InkCanvas1" />
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
'インクを使用できる状態にする
InkCanvas1.EditingMode = InkCanvasEditingMode.Ink
End Sub
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// インクを使用できる状態にする
inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;
}
インクを使用するには EditingMode プロパティにInkCanvasEditingMode.Inkを設定する。
02.描画されたストロークを消去する
キャンバス上に描かれたストロークを消去するには、EditingMode プロパティに EraseByPoint または EraseByStroke を指定します。
EraseByPoint を指定した場合はペンと交差した部分のみが消去され、EraseByStroke を指定した場合はペンと交差したストローク自体が消去されます(ストロークとは描き始めから描き終わりまでの1本の連続した線を言います)。
また、キャンバスに描かれたストロークのすべてを一括で消去するには Strokes プロパティ の Clear メソッドを使用します。
下記はストロークを消去する例です。
EraseByPointでの消去はペンと交差した部分のみが消え、EraseByStrokeはペンと交差した1本のストローク(この例では一筆書きされたL)が消去されています。
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Name="btnInk" Content="インク"/>
<Button Name="btnEraseByPoint" Content="ポイント消しゴム"/>
<Button Name="btnEraseByStroke" Content="ストローク消しゴム" />
<Button Name="btnAllClear" Content="ストローク全消去" Height="23" Width="109" />
</StackPanel>
<InkCanvas Name="InkCanvas1" EditingMode="Ink" />
</StackPanel>
' [インク]ボタンクリック時の処理
Private Sub btnInk_Click(ByVal sender As System.Object,
ByVal e As System.Windows.RoutedEventArgs) Handles btnInk.Click
'インクを使用できる状態にする
InkCanvas1.EditingMode = InkCanvasEditingMode.Ink
End Sub
' [ポイント消しゴム]ボタンクリック時の処理
Private Sub btnEraseByPoint_Click(ByVal sender As System.Object,
ByVal e As System.Windows.RoutedEventArgs) Handles btnEraseByPoint.Click
'ペンがストロークと交差した部分のみを消去する
InkCanvas1.EditingMode = InkCanvasEditingMode.EraseByPoint
End Sub
' [ストローク消しゴム]ボタンクリック時の処理
Private Sub btnEraseByStroke_Click(ByVal sender As System.Object,
ByVal e As System.Windows.RoutedEventArgs) Handles btnEraseByStroke.Click
'ペンが交差したストロークの全体を消去する
InkCanvas1.EditingMode = InkCanvasEditingMode.EraseByStroke
End Sub
' [ストローク全消去]ボタンクリック時の処理
Private Sub btnAllClear_Click(ByVal sender As System.Object,
ByVal e As System.Windows.RoutedEventArgs) Handles btnAllClear.Click
'全ストロークを消去する
InkCanvas1.Strokes.Clear()
End Sub
// [インク]ボタンクリック時の処理
private void btnInk_Click(object sender, RoutedEventArgs e)
{
// インクを使用できる状態にする
inkCanvas1.EditingMode = InkCanvasEditingMode.Ink;
}
// [ポイント消しゴム]ボタンクリック時の処理
private void btnEraseByPoint_Click(object sender, RoutedEventArgs e)
{
// ペンがストロークと交差した部分のみを消去する
inkCanvas1.EditingMode = InkCanvasEditingMode.EraseByPoint;
}
// [ストローク消しゴム]ボタンクリック時の処理
private void btnEraseByStroke_Click(object sender, RoutedEventArgs e)
{
// ペンが交差したストロークの全体を消去する
inkCanvas1.EditingMode = InkCanvasEditingMode.EraseByStroke;
}
// [ストローク全消去]ボタンクリック時の処理
private void btnAllClear_Click(object sender, RoutedEventArgs e)
{
// 全ストロークを消去する
inkCanvas1.Strokes.Clear();
}
ペンと交差した部分を消去するには EditingMode プロパティに EraseByPoint を指定する。
ペンと交差したストロークを消去するには EditingMode プロパティに EraseByStroke を指定する。
すべてのストロークを一括して諸挙するには StrokesプロパティのClearメソッドを使用する。

