1

我在 WPF 中有一个包含很多 UserControls 的项目,一些用户控件使用 Kinect KinectColorViewer.xaml 我想在主窗口中处理传感器发现和设置(连接、断开等)并将其提供给我的 UserControls,如何最好怎么做?

是解释我的问题的项目。

如果您愿意,这里是 github 链接。

4

1 回答 1

3

从您的示例代码中,

假设您希望尽可能多地维护 Microsoft 提供的代码,您将需要在初始化应用程序时设置对 KinectSensorManager 的引用。我的构造函数通常看起来像这样:

private readonly KinectSensorChooser sensorChooser = new KinectSensorChooser();

public KinectSensorManager KinectSensorManager { get; private set; }

public MainViewModel()
{
    // initialize the Kinect sensor manager
    KinectSensorManager = new KinectSensorManager();
    KinectSensorManager.KinectSensorChanged += this.KinectSensorChanged;

    // locate an available sensor
    sensorChooser.Start();

    // bind chooser's sensor value to the local sensor manager
    var kinectSensorBinding = new Binding("Kinect") { Source = this.sensorChooser };
    BindingOperations.SetBinding(this.KinectSensorManager, KinectSensorManager.KinectSensorProperty, kinectSensorBinding);
}

KinectSensorManager 只是一个辅助类。您可以重写代码以轻松避免使用它,但它不会做任何坏事(为您做了很多好事)所以我一直在使用它。此外,由于我假设您希望尽可能多地重用代码,因此我们希望保持其使用。

对于您的控制,您可以扩展 KinectControl,它将为您设置一堆有用的项目。所以...

public partial class KinectUserControl : KinectControl
{
  ...
}

这将使您的控件可以访问许多侦听各种事件的可覆盖函数(如 KinectSensorChanged)。检查我们的 KinectColorViewer 代码,您可以看到它是如何覆盖此功能的,如果您更换 Kinect,它可以自动开始显示新数据。

在 XAML 中声明您的控件时,您现在可以添加对 KinectSensorManager 的引用:

<my:KinectUserControl KinectSensorManager="{Binding KinectSensorManager}" />

因为您的控件现在具有 KinectSensorManager 属性,所以它也应该传递给您的 KinectColorViewer 控件。

于 2012-10-08T14:59:20.160 回答