コア wpf API (UIElement) のクラスを再定義したいのですが、クラスを継承したくありません。
MS Kinect のプロジェクトで、ユーザーのスケルトンの手でマップされたカーソルを再実装しました。マウスが発生させたものと同様のイベントを実装しました(要素に入る、要素を離れる...)。UIElement から継承するすべての要素がいくつかの添付プロパティを取得するようにします。
KinectCursorEnter, KinectCursorMove...
およびいくつかのプロパティ:
public bool IsKinectLeftCursorOver { get; set; }
public bool IsKinectLeftCursorDirectlyOver { get; set; }
public bool IsKinectRightCursorOver { get; set; }
public bool IsKinectRightCursorDirectlyOver { get; set; }
public bool IsKinectLeftCursorCaptured { get; set; }
...
そのようなクラスを変更すると、混乱する方法がたくさんあることはわかっていますが、このレベルでそれらのプロパティを追加したいと考えています。( 、 ...UIElement
などは既に実装されています)。Kinect は他の入力デバイス (マウス、スタイラス、キーボードなど) です。MouseEnter
StylusEnter
私は試しました:
- UIElement を継承して機能を追加するには、すべてのクラスを再実装する必要があります。
私は見てみました:
- Rubyのオープンクラスとかあったら
- 拡張機能を使用できる場合 (リンク)
- どうにか使えるならアダプターパターン
これまでのところ、使用しています:
- インターフェイスとすべての要素を再定義します:
KinectButton
から継承しButton
て実装するがありますが、(Rectangle、Ellipse...)IKinectInputElement
である一部のクラスではそれを行うことができません。sealed
数か月 (数年?) MSFT は、Wpf API でこれらの種類のプロパティとメソッドを実装する予定です。しかし、今のところ、回避策が必要です。
PS: ユーザーの手の 1 つでマウスを制御したくありません。マウスは 1 つですが、2 つのカーソルが必要です。KinectLeftCursorEnter、KinectRightCursorEnterなどのイベントがあります..