3

画像後処理用のシンプルな WPF UI を開発しています。

Canvas で使用するドラッグ可能な WPF コントロールを作成したいと思います。これは、おおよそ次のようになります。

http://img32.imageshack.us/img32/884/photoeditor.png http://img32.imageshack.us/img32/884/photoeditor.png

両方の終点の楕円はドラッグ可能で、それらを結ぶ線は終点の移動に追従します。

これで、これらの要素を Canvas に追加するだけでこれを実装する方法がわかりました。次に、必要なイベント処理を実装して、要素がドラッグされたときに移動できるようにします。しかし、他の種類のドラッグ可能なコントロールを追加したい場合、それを維持するのは困難です。

私がやりたいことは、すべての処理を FrameworkElement または UIElement から派生した独自のクラス (DragLine など) に分離することです。このドラッグ可能な UI 要素を Canvas に追加するには、DragLine のインスタンスを作成し、それを Canvas.Children に追加します。私のプログラムの残りの部分では、DragLine インスタンスのみが表示され、新しい要素の描画に使用される線や楕円について心配する必要はありません。

すべての UI 要素を自分で描画するのではなく、楕円などの標準的な形状を使用して線の終点を実装したいと考えています。これは、これらの形状が既に実装しているイベント処理とヒット テストを再利用したいからです。

質問: FrameworkElement から派生することは、これを行う正しい方法ですか? 線と終点の楕円は、新しいクラスの視覚的で論理的な子になります。

FrameworkElement からの派生が推奨される方法ではない場合、代わりにどのようにしますか?

そうである場合、新しいクラスがキャンバスでのみ使用されることを考えると、その実装を簡素化する方法はありますか (そして、グリッドやスタックパネルなどでうまく機能する必要はありません)?

4

1 に答える 1

4

ああ、そうです、フレームワークに既に存在するものを再発明しようとしています。それはかなり長い間私の趣味でした。

ここで行っていることは、特殊なタイプのadornerを作成しようとしていることです。これらは、フレームワークに既に存在するビットを使用して比較的簡単に実行できます。 ここから始めることをお勧めします。

もう 1 つ注目したいのはDecoratorsです。ほとんど同じことをしますが、より視覚的だと思います。どちらを使用するかは、要件によって異なります。

于 2009-09-08T14:53:52.323 に答える