2012-04-11 9 views
2

私は同じキャンバスにいくつかのコントロールを用意しています。それらはすべて同じzIndexを使用していますが、ロードされたオーダーのためにいくつかは上にあり、他のものは下にあります。 私の質問AcontrolがBcontrolを超えていて、それをクリックしても、Aだけがクリックイベントを取得する。 Bさんにイベントをもらうにはどうすればいいですか?ありがとう。wpfでマウスをクリックしたときに、より低いzindexでコントロールを取得するには?

+0

MouseClickイベントの処理されたプロパティをfalseに設定しようとしましたか? – Dominik

+0

私は試しましたが、うまくいきませんでした... – Cuero

答えて

2

イベントを取得するだけの場合は、最初のイベントの前にあるすべてのコントロールに対して、イベントを取得するために後ろのイベントにIsHitTestVisible = Falseを設定する必要があります。あなたは欲しい。

イベントを受け取るには、UI全体を要素ツリーとして考える必要があります。あなたが話しているこれらのコントロールはすべて兄弟です。何かがクリックされると、親が最初に通知を受け、それがクリックを処理しなければ、そのマウス位置にあるその親の可視の子要素に渡され、処理されるまで続きます。マウスクリックの処理からクリックされる子を停止する唯一の方法は、すべての兄弟の共通の親にイベントを最初に処理させることです。

マウスの下にあるすべての子要素のclickイベントを呼び出すには、親のハンドラで巧妙なことをしなければなりません。問題は、問題はそのフレームワークがどのコントロールマウスの下にあったので、あなたは今その勤勉をしなければなりません。

+0

最後に私はあなたのアドバイスを取ると、それはうまくいくようです。ありがとう! – Cuero

1

可能性があります。 MouseClickを未処理としてマークしても、兄弟ではない親要素(Canvas)にルーティングされます。唯一の方法はヒットテストです。ユーザーがAcontrolをクリックすると、hit-testは別のコントロールがその下にあるかどうかを判断する必要があります。

コールバックでヒットテストを使用する必要があります。これはBcontrolを見つけるためにAcontrolをスキップすることができます。見つけたら、Bcontrolをクリックしたものとして扱うことができます。

+0

あなたの提案に感謝します。 – Cuero

関連する問題