SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight/WPFで使える逆引きTips集

Silverlight/WPFで使える逆引きTips集
――インクキャンバス機能

(6) InkCanvasコントロール

ダウンロード InkCanvas_WPF_VB.zip (2.0 MB)
ダウンロード InkCanvas_WPF_CS.zip (72.0 KB)

01.インクを使用する

 InkCanvas コントロールで絵を描ける(インクを使用する)ようにするには、EditingMode プロパティの設定をする必要があります。

 EditingMode プロパティには InkCanvasEditingMode 列挙体の値を指定します。インク(描画用のペン)を使用する場合は、InkCanvasEditingMode.Ink を指定します。

 参考までに、InkCanvasEditingMode 列挙体を下記に示します。

InkCanvasEditingMode 列挙体
メンバ名 説明
None ペンがInkCanvasにデータを送信する際、アクションが実行されません
Ink インクで線を描画できるようにします
GestureOnly InkCanvas上でペンがどのように動いたのかを認識しますが、線は描画されません
InkAndGesture ペンが動いたとおりに軌跡が描かれますが、キャンバスからペンを離すと軌跡が消えます。InkCanvasはペンがどのように動いたのかを認識します。
Select 描画されている線を選択することができます
EraseByPoint ペンが線に交差したときに、交差した部分を消去します
EraseByStroke ペンが交差した線全体を消去します。

 下記は InkCanvasで線を描けるように、EditinMode に InkCanvasEditingMode.Ink を設定する例です。

インクを使用する例
インクを使用する例
XAMLの例
<InkCanvas EditingMode="Ink" Name="InkCanvas1" />
VBの例
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    'インクを使用できる状態にする
    InkCanvas1.EditingMode = InkCanvasEditingMode.Ink
End Sub
C#の例
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)が消去されています。

描画されたストロークを消去する
描画されたストロークを消去する
XAMLの例
<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>
VBの例
' [インク]ボタンクリック時の処理
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
C#の例
// [インク]ボタンクリック時の処理
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メソッドを使用する。

次のページ
03.描画されたストロークを選択する

この記事は参考になりましたか?

Silverlight/WPFで使える逆引きTips集連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5666 2011/01/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー