InkCanvas コントロールでは、ユーザーのマウス(またはタッチ)操作を認識することができます。
操作(ユーザーが操作したマウスやタッチの操作)を認識するには、EditingMode プロパティに InkAndGesture または GestureOnly を指定します。
InkAndGesture を指定した場合は、ユーザーがマウスの左ボタンを押している間(またはタッチしている間)軌跡が描かれます。GestureOnly を指定した場合は、ユーザーがマウスの左ボタンを押している間(またはタッチしている間)のジェスチャを認識しますが軌跡は描かれません。
ジェスチャを認識すると、Gesuture イベントが発生します。認識結果は Gesuture イベントの引数 e が持つメソッド GetGestureRecognitionResults メソッドで取得します。
認識可能な操作の一例を下記に示します。詳しくは MSDN のApplicationGesture 列挙体を参照して下さい。
ApplicationGesutre列挙体 メンバ名説明 Check レ点 Circle 円(楕円) DoubleCircle 二重円 Down 下向きのストローク Up 上向きのストローク Square 四角形 Star 一筆書きの星形 Triangle 三角形
下記はユーザーのジェスチャを認識して、認識結果をメッセージボックスに表示する例です。きれいに描けるほど認識率は上がります。
XAMLの例
<InkCanvas Name="InkCanvas1" EditingMode="InkAndGesture" />
VBの例
'下記をインポート
Imports System.Windows.Ink
Imports System.Collections.ObjectModel
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
'ジェスチャモードの設定
InkCanvas1.EditingMode = InkCanvasEditingMode.InkAndGesture
End Sub
' ジェスチャの認識
Private Sub InkCanvas1_Gesture(ByVal sender As System.Object, ByVal e As System.Windows.Controls.InkCanvasGestureEventArgs) Handles InkCanvas1.Gesture
Dim gestureResults As ReadOnlyCollection(Of GestureRecognitionResult)
'ジェスチャの認識結果を取得
gestureResults = e.GetGestureRecognitionResults()
' 認識結果の信頼性が高い場合に、メッセージを表示する
If gestureResults(0).RecognitionConfidence = RecognitionConfidence.Strong Then
MessageBox.Show(gestureResults(0).ApplicationGesture.ToString())
End If
End Sub
C#の例
// 下記を追加
using System.Windows.Ink;
using System.Collections.ObjectModel;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
// ジェスチャモードの設定
inkCanvas1.EditingMode = InkCanvasEditingMode.InkAndGesture;
}
// ジェスチャの認識
private void inkCanvas1_Gesture(object sender, InkCanvasGestureEventArgs e)
{
ReadOnlyCollection gestureResults;
// ジェスチャの認識結果を取得
gestureResults = e.GetGestureRecognitionResults();
// 認識結果の信頼性が高い順にメッセージを表示する
if ( gestureResults[0].RecognitionConfidence == RecognitionConfidence.Strong )
MessageBox.Show(gestureResults[0].ApplicationGesture.ToString());
}
