我在 WPF 中有一个包含很多 UserControls 的项目,一些用户控件使用 Kinect KinectColorViewer.xaml 我想在主窗口中处理传感器发现和设置(连接、断开等)并将其提供给我的 UserControls,如何最好怎么做?
这是解释我的问题的项目。
如果您愿意,这里是 github 链接。
从您的示例代码中,
假设您希望尽可能多地维护 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 控件。