1

多くの UserControls を含む WPF のプロジェクトがあり、一部のユーザー コントロールは 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 に答える