Kinect for Windows SDK 1.7 引入 Kinect Interactions 命名空間,提供一套原生WPF控件庫(Kinect.Toolkit.Controls.dll),封裝了手勢識別、多用戶並發、懸浮/按壓/抓取等交互邏輯,極大降低了體感應用開發門檻。本文從環境配置、核心容器、手勢光標、用戶視圖、三大基礎控件、滾動瀏覽器六個維度,配合動圖演示完整解析其用法。
Microsoft.Kinect.dllMicrosoft.Kinect.Toolkit.dllMicrosoft.Kinect.Toolkit.Controls.dllMicrosoft.Kinect.Toolkit.Interaction.dllbin/Debug)必須放置 KinectInteraction170_32.dll 或 _64.dll(從SDK安裝目錄 Redist 文件夾複製),否則運行拋出 DllNotFoundException。

<Window ... xmlns:k="https://schemas.microsoft.com/kinect/2013">
自動處理未連接、USB口錯誤、電源未接、初始化中等狀態,並提供幫助鏈接。
<Grid>
<k:KinectSensorChooserUI HorizontalAlignment="Center" VerticalAlignment="Top" Name="sensorChooserUi" />
</Grid>
private KinectSensorChooser sensorChooser;
public MainWindow() { InitializeComponent(); Loaded += OnLoaded; }
private void OnLoaded(object sender, RoutedEventArgs e) {
this.sensorChooser = new KinectSensorChooser();
this.sensorChooser.KinectChanged += SensorChooserOnKinectChanged;
this.sensorChooserUi.KinectSensorChooser = this.sensorChooser;
this.sensorChooser.Start();
}
private void SensorChooserOnKinectChanged(object sender, KinectChangedEventArgs args) {
// 演示用彈窗,實際項目可記錄日志或更新UI
MessageBox.Show(args.NewSensor == null ? "No Kinect" : args.NewSensor.Status.ToString());
if (args.NewSensor != null) {
// 關鍵:將傳感器賦給 KinectRegion
kinectRegion.KinectSensor = args.NewSensor;
}
}






所有Interaction控件必須置於 KinectRegion 內部。它負責:骨骼追蹤座標映射、手勢光標渲染、多用戶手勢分離、焦點管理。
<k:KinectRegion Name="kinectRegion">
<!-- 所有交互控件放這裡 -->
</k:KinectRegion>
啟用近景模式(Seated追蹤)適配桌面辦公場景:
args.NewSensor.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
args.NewSensor.SkeletonStream.Enable();
try {
args.NewSensor.DepthStream.Range = DepthRange.Near;
args.NewSensor.SkeletonStream.EnableTrackingInNearRange = true;
args.NewSensor.SkeletonStream.TrackingMode = SkeletonTrackingMode.Seated;
} catch { /* 回退默認模式 */ }
運行後界面顯示手形光標:

顯示當前被追蹤用戶的深度輪廓,幫助用戶確認站位。
<k:KinectUserViewer VerticalAlignment="Top" HorizontalAlignment="Center"
k:KinectRegion.KinectRegion="{Binding ElementName=kinectRegion}" Height="100" />

手懸浮 → 放大陰影;手掌前推(Z軸前移)達閾值 → 觸發Click,光標變色回饋。
<k:KinectTileButton Label="Press me!" Click="ButtonOnClick" />
private void ButtonOnClick(object sender, RoutedEventArgs e) {
MessageBox.Show("You clicked me!");
}

樣式差異化,交互邏輯同 KinectTileButton,適合徑向菜單、底部工具欄。
<k:KinectCircleButton Label="Circle" HorizontalAlignment="Right" Height="200" VerticalAlignment="Top" Click="ButtonOnClick">Hi</k:KinectCircleButton>

革命性控件:手移入區域 → 顏色變化;握拳(Grip手勢) → 光標變抓取狀態;移動拳頭 → 內容跟隨平移;張開手 → 釋放;再配合按壓選中項目。完美複製觸屏滑動體驗。
<k:KinectScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" VerticalAlignment="Bottom">
<StackPanel Orientation="Horizontal" Name="scrollContent" />
</k:KinectScrollViewer>
for (int i = 1; i < 20; i++) {
var btn = new KinectCircleButton { Content = i, Height = 200 };
int idx = i;
btn.Click += (o, args) => MessageBox.Show("You clicked button #" + idx);
scrollContent.Children.Add(btn);
}

調試技巧:使用 Kinect Studio 錄製骨骼/深度幀數據,離線回放調試,避免反覆站立操作,極大提升開發效率。動圖錄製建議用 Ulead GIF Animator 壓縮幀率尺寸,避免發布失敗。
KinectRegion 內部維護多用戶手勢狀態機,兩人同時操作不同控件互不干擾,自動分配光標顏色區分身份,無需開發者編寫協調代碼。
Kinect Interactions 將復雜的手勢識別、座標映射、多用戶並發封裝為標準WPF控件,開發者專注業務邏輯而非底層算法。核心優勢:
示例代碼下載:KinectInteraction.rar(需自行補齊 KinectInteraction170_32/64.dll 到輸出目錄)。
作者:yangecnu | 出處:https://www.cnblogs.com/yangecnu/