4

画像やコードなしで問題を説明するのは簡単ではありません。興味のある方のために、 http://rapidshare.com/files/461745095/02.WPFControlEvents.rarからダウンロードできるサンプルC#/WPFプロジェクトを作成しました。

非常に小さなプロジェクト(45KB)です。問題は次のとおりです(ゆがんだ説明についてお詫びします):

「派手な」(そしてかなり醜い)ボタンには、1。)ラベル、2。)キャンバス、3。)2つの同心楕円がすべて左から右に配置されたスタックパネルが含まれています。

スタックパネル用のMouseEnterおよびMouseLeaveイベントハンドラーがあり、マウスがスタックパネルの上にあるか外側にあるかを示すメッセージをタイトルバーに表示します。

問題は、マウスがラベルの上にあるとき(スタックパネルに含まれているとき)、マウスがスタックパネルの上にあると(正しく)報告されることです。マウスをキャンバス(スタックパネルにも含まれています)上に移動すると、マウスは(誤って?)スタックパネル上にないことが報告されますが、マウスを少し右に移動すると(2つの楕円上) 、キャンバス上にあります)、マウスは再びスタックパネル上にあると報告されます。

マウスがキャンバス上にあるときはスタックパネル上にないと報告されるのに、マウスが楕円(キャンバスにペイントされている)の上にあるときはスタックパネル上にあると報告されるのはなぜですか?

問題に光を当ててくれてありがとう、

ジョン。

4

1 に答える 1

2

キャンバスの背景を透明に設定する必要がある可能性があります。これにより、「ヒット テスト可能」になり、マウス オーバー イベントを報告できるようになります。

詳細については、こちらを参照してください。ただし、Canvas の背景はデフォルトで null になっています。

于 2011-05-10T16:01:27.977 に答える