你可以设置InkCanvas 的EditingMode 属性进行手势识别。如果设置EditingMode 属性为GestureOnly, 用户将不能在控件上绘图,但是如果使用鼠标或者其他输入设备在控件上绘制手势,InkCanvas 将尝试对手势进行识别。
在这个模式下,只要你不放开鼠标或者输入设备,任何你绘制的图像将会显示,一旦放开就会消失。
正在绘制时:
绘制完成时:
一旦你完成绘制手势,InkCanvas 将会尝试识别你绘制的内容。它将会触发Gesture 事件,在Gesture 事件中你可以询问它识别出了什么样的手势。
所有InkCanvas 可以识别的手势都列在了System.Windows.Ink.ApplicationGesture 枚举中。包含有类似圆圈、方形、点击、勾选和点击等。
下面是一个例子,注册Gesture 事件,然后在事件响应函数中调用GetGestureRecognitionResults 方法获得一个包含候选手势的列表。我们在例子的后面将获得的识别手势在一个调试窗口上显示出来。
private void ink_Gesture(object sender, InkCanvasGestureEventArgs e)
{
ReadOnlyCollection<GestureRecognitionResult> gestures = e.GetGestureRecognitionResults();
foreach (GestureRecognitionResult gest in gestures)
{
Trace.WriteLine(string.Format("Gesture: {0}, Confidence: {1}", gest.ApplicationGesture, gest.RecognitionConfidence));
}
}
下面是一些识别出来的示例的手势,每个手势都有一个Confidence 属性,改属性值由.Net系统提供,它建议手势识别结果的可信度。
原文地址:https://wpf.2000things.com/2012/02/07/489-using-the-inkcanvas-to-recognize-gestures-part-i/
********************************************译者注***************************************************
下面将ApplicationGesture 枚举的值列举出来:
AllGestures 识别所有特定于应用程序的笔势。
NoGesture 不识别任何特定于应用程序的笔势。
Scratchout 只可使用一个笔画绘制此笔势,并且该笔画至少包含三次来回移动。
Triangle 只可使用一个笔画绘制三角形,而不可抬笔。
Square 可以使用一个或两个笔画绘制正方形。如果只有一个笔画,请绘制整个正方形而不抬笔。如有两个笔画,请首先绘制正方形的三条边,然后使用另一个笔画绘制剩下的一条边。绘制正方形的笔画不可超过两个。
Star 星形必须恰有五个点,并且必须一个笔画绘制完毕而不抬笔。
Check 上行笔画的长度必须为较短的下行笔画的两倍。
Curlicue 请在需要执行操作的位置开始绘制花体。
DoubleCurlicue 请在需要执行操作的位置开始绘制双花体。
Circle 只可使用一个笔画绘制圆圈,而不可抬笔。
DoubleCircle 这两个圆圈必须相互重叠,并且只可使用一个笔画绘制这两个圆圈,而不可抬笔。
SemiCircleLeft 必须从左至右绘制半圆。半圆的两端应当尽量保持水平。
SemiCircleRight 必须从右至左绘制半圆。半圆的两端应当尽量保持水平。
ChevronUp V 形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
ChevronDown V 形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
ChevronLeft V 形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
ChevronRight V 形的两边必须绘制得尽量相等。角度必须为锐角,并在一点结束。
ArrowUp 可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
ArrowDown 可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
ArrowLeft 可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
ArrowRight 可以使用一个笔画绘制箭头,也可以使用两个笔画绘制箭头(一个笔画为线条,另一个笔画为箭头的头部)。绘制箭头的笔画不可超过两个。
Up 绘制此笔势必须快速向上一次划过。
Down 绘制此笔势必须快速向下一次划过。
Left 绘制此笔势必须快速向左一次划过。
Right 绘制此笔势必须快速向右一次划过。
UpDown 只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两个笔画必须尽量相互靠近。
DownUp 只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两个笔画必须尽量相互靠近。
LeftRight 只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两个笔画必须尽量相互靠近。
RightLeft 只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两个笔画必须尽量相互靠近。
UpLeftLong 只可使用一个笔画绘制此笔势,并且首先书写向上笔画。向左笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
UpRightLong 只可使用一个笔画绘制此笔势,并且首先书写向上笔画。向右笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
DownLeftLong 只可使用一个笔画绘制此笔势,并且首先书写向下笔画。向左笔画的长度大约为向上笔画的两倍,并且这两个笔画必须构成直角。
DownRightLong 表示按下空格键。只可使用一个笔画绘制此笔势,并且首先书写向下笔画。向右笔画的长度必须是向上笔画的两倍,并且这两个笔画必须构成直角。
UpLeft 只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两边的长度必须尽量相等,并且两边构成直角。
UpRight 只可使用一个笔画绘制此笔势,并且首先书写向上笔画。两边的长度必须尽量相等,并且两边构成直角。
DownLeft 只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两边的长度必须尽量相等,并且两边构成直角。
DownRight 只可使用一个笔画绘制此笔势,并且首先书写向下笔画。两边的长度必须尽量相等,并且两边构成直角。
LeftUp 只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两边的长度必须尽量相等,并且两边构成直角。
LeftDown 只可使用一个笔画绘制此笔势,并且首先书写向左笔画。两边的长度尽量相等,并且两边构成直角。
RightUp 只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两边的长度必须尽量相等,并且两边构成直角。
RightDown 只可使用一个笔画绘制此笔势,并且首先书写向右笔画。两边的长度必须尽量相等,并且两边构成直角。
Exclamation 必须首先绘制线条,然后快速绘制圆点,并且圆点尽量靠近线条。
Tap 表示一次鼠标单击。为了尽量减少挪移,请快速点击。
DoubleTap 表示一次鼠标双击。为了取得最佳效果,请快速点击,并尽量点击同一位置。