2

コア 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 は他の入力デバイス (マウス、スタイラス、キーボードなど) です。MouseEnterStylusEnter

私は試しました:

  • UIElement を継承して機能を追加するには、すべてのクラスを再実装する必要があります。

私は見てみました:

  • Rubyのオープンクラスとかあったら
  • 拡張機能を使用できる場合 (リンク)
  • どうにか使えるならアダプターパターン

これまでのところ、使用しています:

  • インターフェイスとすべての要素を再定義します:KinectButtonから継承しButtonて実装するがありますが、(Rectangle、Ellipse...)IKinectInputElementである一部のクラスではそれを行うことができません。sealed

数か月 (数年?) MSFT は、Wpf API でこれらの種類のプロパティとメソッドを実装する予定です。しかし、今のところ、回避策が必要です。

PS: ユーザーの手の 1 つでマウスを制御したくありません。マウスは 1 つですが、2 つのカーソルが必要です。KinectLeftCursorEnter、KinectRightCursorEnterなどのイベントがあります..

4

1 に答える 1

4

You can use Extension Methods to extend the class.

于 2012-06-06T07:53:58.113 に答える