マウスイベントをキャプチャする完全に透明なWPFウィンドウを作成する
-
22-07-2019 - |
質問
最上位の透明な非モーダルウィンドウを使用して、WPFでマウスイベントをトラップしようとしています。ウィンドウの不透明度が0.01以上で背景色がある場合、これは正常に機能することがわかりましたが、不透明度を0に設定すると、マウスメッセージを受信しなくなります。このウィンドウを完全に透明に見せながらマウス入力を取得する方法はありますか?
解決
私が知る限り、いいえ。
Control
または Window
が完全に透明になると、クリックスルーできます。これは、 Window.Background =" Transparent"
または Opacity =" 0"
を設定した場合です。私の知る限り、これはWPFの仕様です。
0.01の不透明度を使用する場合、ウィンドウが表示されることはほとんどありません。これはおそらく、機能を実現するための最善策です。
編集:もう1つの解決策は、背景色をほぼ透明な色に設定することです。 Background ="#01000000"
を使用して、アルファ値1を指定しました。これにより、ウィンドウの背景が透明に見えますが、完全な不透明度でウィンドウにコントロールを配置できます。
他のヒント
Visual Studio 2010の場合: デザインビューでウィンドウを選択します。
ウィンドウのプロパティを次のように設定します。
- AllowsTransparency:チェック
- 背景:透明
- WindowStyle:なし
Background = nullの代わりにBackground = Brushes.Transparentを設定するだけです。
不透明度を使用する必要はまったくありません(つまり、不透明度を100%のままにしておきます)。
たとえば、コントロール名は MyGrid
で、 Transparent
にすると、常に MouseOverEvent
になります.....
If (ウィンドウ AllowsTransparency
が True
で、ウィンドウ Background
が< code>透明)次に
MyGrid
Background
には#01777777
のような色を使用しますまたは0.01
MyGrid
Opacity
の場合。
その他
使用
#00777777
のようなものをMyGrid
Background
または0.00
MyGrid
不透明度
。
不透明度を100%(またはゼロ以外の値)に設定し、背景を透明(nullではなく)に設定すると、ほとんどのコントロールがヒット可能になります。
IsHitTestVisible を必ず設定してください。本当に。不透明度が100%で、背景が透明であっても、すべてのコントロールがヒットするわけではありません。
Mouse.Capture
を使用する方が簡単な場合があります。
https://msdn.microsoft.com/en-us/library/ ms771301.aspx
オブジェクトがマウスをキャプチャすると、マウスポインターが別のオブジェクト上にある場合でも、すべてのマウス関連イベントは、マウスキャプチャのあるオブジェクトがイベントを実行するかのように扱われます。