2011-08-16 16 views
3

複数のUIレイヤーを持つ可能性のある領域にアイテムをドラッグするユースケースがあります。WPFでオーバーラップするUIオブジェクトをドラッグアンドドロップするときのイベントの伝播を停止する方法

使用例1:ノードをツリービューからワークスペース領域(ドロップターゲット)にドラッグアンドドロップします。そのワークスペース領域にチャートが作成されます。

ユースケース2:ノードをツリービューからグラフ上にドラッグアンドドロップします。グラフは元のワークスペース領域の上にあります。余分なデータがグラフに追加されます。

私の実装の問題は、ユースケース2を実行すると、ワークスペース領域(グリッド)ANDグラフのドロップイベントが呼び出されることです。見えるものだけではありません。

他の人はどのようにこのシナリオを実装していますか?

答えて

3

ドロップイベントハンドラに=真e.Handledルーティングイベント伝播セットを停止します。

1

あなたのケースを「マルチレイヤー」と呼ぶことはありません。代わりに、それは視覚的オブジェクトの通常の階層です。 「マルチレイヤー」の場合は、たとえば、いくつかの兄弟キャンバスにドロップします。

とにかく、ドロップイベントが管理されている場所があるとすれば、私はドロップイベント(バブリング)を聞きます。イベントハンドラには、最初に表示されるビジュアルオブジェクトを示す "OriginalSource"というパラメータがあります。この時点で、ビジュアルツリーを上向きにスキャンして(VisualTreeHelper)、 "chart"要素を検索します。見つかった場合、ドロップはチャート上にあり、それ以外の場合は空のワークスペース領域にあります。

希望します。

乾杯

関連する問題