多くの UserControls を含む WPF のプロジェクトがあり、一部のユーザー コントロールは 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 コントロールにもパススルーする必要があります。