Erstellen Sie eine vollständig transparente WPF Fenster Mausereignisse erfassen
-
22-07-2019 - |
Frage
Ich versuche zu stoppen Mausereignisse in WPF durch ein obersten, transparente nicht-modale Fenster. Ich finde, dass dies funktioniert gut, wenn die Trübung des Fensters 0,01 oder größer ist, und es hat eine Hintergrundfarbe, aber wenn die Opazität auf 0 gesetzt ist es nicht mehr empfängt Meldungen von der Maus. Gibt es eine Möglichkeit das Fenster vollständig transparent aussehen und noch Mauseingaben bekommen?
Lösung
Soweit ich weiß, nein.
Wenn ein Control
oder Window
vollständig transparent ist, kann sie dann durch angeklickt werden. Dies ist der Fall, wenn Sie Ihre Window.Background="Transparent"
oder Opacity="0"
gesetzt. Soweit ich weiß, ist dies durch Design in WPF.
Wenn eine Opazität von 0,01 verwenden, sollten Sie kaum das Fenster sehen, wenn überhaupt. Dies ist wahrscheinlich die beste Wahl bei der Funktionalität zu erreichen.
Edit: Eine andere Lösung, die ich ausprobiert und funktioniert, ist die Hintergrundfarbe auf eine fast transparente Farbe einzustellen. Ich benutzte Background="#01000000"
, wodurch ein Alpha-Wert von 1. Angabe Das macht Ihre Fenster Hintergrund transparent aussehende, sondern ermöglicht es Ihnen Kontrollen mit dem Fenster mit voller Opazität zu stellen.
Andere Tipps
In Visual Studio 2010: Wählen Sie ein Fenster in Ihrem Design-Ansicht.
Legen Sie die Eigenschaften des Fensters an:
- AllowsTransparency: check it
- Hintergrund: Transparent
- Window: Keine
Just gesetzt Hintergrund = Brushes.Transparent statt Background = null.
Sie müssen keine Opazität verwenden überhaupt (dh. Nur lassen Sie es bei 100% Opazität).
Zum Beispiel denke ich, Ihre Steuer Name MyGrid
ist und Sie wollen es Transparent
werden und immer bekommen MouseOverEvent
.....
Wenn (Fenster AllowsTransparency
ist True
und das Fenster Background
ist Transparent
) Dann
eine Farbe wie
#01777777
fürMyGrid
Background
oder0.01
fürMyGrid
Opacity
.
Else
so etwas wie
#00777777
fürMyGrid
Background
oder0.00
fürMyGrid
Opacity
.
Einstellen der Opazität auf 100% (oder einen Nicht-Null-Wert) und den Hintergrund Transparent (anstelle von null) sollten die meisten Kontrollen akzeptierbar machen.
Stellen Sie sicher, setzen IsHitTestVisible auf true. Nicht alle Kontrollen getroffen werden können, auch wenn die Opazität 100% und der Hintergrund ist transparent.
Sie finden es möglicherweise einfacher Mouse.Capture
zu verwenden.
https://msdn.microsoft.com/en-us/library/ ms771301.aspx
Wenn ein Objekt mit der Maus erfasst, alle Maus bezogene Ereignisse werden so behandelt, als ob das Objekt mit der Maus capture das Ereignis durchführen, auch wenn sich der Mauszeiger über ein anderes Objekt ist.