Sto provando a intercettare gli eventi del mouse in WPF utilizzando una finestra non modale più in alto e trasparente. Sto scoprendo che questo funziona bene se l'opacità della finestra è 0,01 o superiore e ha un colore di sfondo, ma quando l'opacità è impostata su 0 non riceve più i messaggi del mouse. C'è un modo per rendere questa finestra completamente trasparente e ottenere comunque l'input del mouse?Creare una finestra WPF completamente trasparente per acquisire gli eventi del mouse
risposta
Per quanto ne so, no.
Quando uno Control
o Window
è completamente trasparente, può essere fatto clic su. Questo è il caso se imposti il tuo Window.Background="Transparent"
o Opacity="0"
. Per quanto ne so, questo è di progettazione in WPF.
Quando si utilizza un'opacità del 0,01, si dovrebbe a malapena a vedere la finestra, se non del tutto. Questa è probabilmente la soluzione migliore per ottenere la funzionalità.
Modifica: Un'altra soluzione, che ho provato e funziona, è impostare il colore di sfondo su un colore quasi trasparente. Ho usato Background="#01000000"
, dando così un valore alfa di 1. Ciò rende la finestra sullo sfondo trasparente, ma consente di posizionare i controlli su di essa con la finestra in piena opacità.
Sì, non sono riuscito a trovare una soluzione alternativa. Ha senso. –
Vedere la mia modifica per una soluzione diversa. Puoi cambiare lo sfondo in un colore quasi trasparente e mantenere la finestra in piena opacità nel caso in cui desideri sovrapporre alcuni controlli sullo schermo. –
La seconda soluzione funziona ma sembra uguale a quella di Opacity a 0,01. –
Basta impostare Sfondo = Brushes.Transparent invece di Sfondo = null.
Non è necessario utilizzare l'opacità a tutti (es. Solo lasciarlo al 100% di opacità).
Ho provato questo, pensando la stessa possibilità, ma non funziona. Quando lo sfondo è trasparente, i clic non vengono acquisiti dal programma, invece di afferrare qualsiasi programma si trovi al di sotto. –
Puoi mostrare un esempio? Io uso questo approccio (in genere # 00000000 perché è così facile da scrivere) e sembra funzionare bene per me. – Egor
Impostare l'opacità al 100% (o qualsiasi valore diverso da zero), e lo sfondo su trasparente (anziché null) dovrebbe rendere maggior parte dei controlli hittable.
Assicurarsi di impostare IsHitTestVisible su true. Non tutti i controlli possono essere colpiti, anche se l'opacità è al 100% e lo sfondo è trasparente.
Forse sto facendo qualcosa di sbagliato, ma quando faccio un Show su una finestra con queste impostazioni non viene visualizzato affatto (cioè la finestra non è presente quando si alt + tab). –
In Visual Studio 2010: Selezionare la finestra nella vostra vista di disegno.
Impostare le proprietà della finestra a:
- AllowsTransparency: controllare
- Background: trasparente
- WindowStyle: Nessuno
Non sono sicuro del motivo per cui questo non ha ricevuto alcun +1, funziona perfettamente! – JMK
@ JMK Perché questo fa passare i clic attraverso la finestra, a meno che non si prenda un controllo effettivo all'interno della finestra. – prettyvoid
La chiave per me era "AllowsTransparency" – ariel
Per esempio penso che il tuo nome di controllo è MyGrid
e vuoi che sia Transparent
e ottieni sempre MouseOverEvent
.....
Se (finestra AllowsTransparency
è True
e la finestra Background
è Transparent
) Poi
uso un colore come
#01777777
perMyGrid
Background
O0.01
perMyGrid
Opacity
.
Else
uso qualcosa come
#00777777
perMyGrid
Background
O0.00
perMyGrid
Opacity
.
Si potrebbe trovare più semplice da usare Mouse.Capture
.
https://msdn.microsoft.com/en-us/library/ms771301.aspx
Quando un oggetto cattura il mouse, tutti gli eventi relativi del mouse sono trattati come se l'oggetto con il mouse cattura eseguire l'evento, anche se il puntatore del mouse si trova sopra un altro oggetto.
- 1. Come creare una finestra semitrasparente in WPF che consente il passaggio degli eventi del mouse tramite
- 2. Rendere un oggetto "trasparente" per gli eventi del mouse?
- 3. Come posso rendere invisibile una finestra agli eventi del mouse in WPF?
- 4. Come creare JButton parzialmente trasparente su JFrame completamente trasparente?
- 5. Creare un buco trasparente all'interno sfondo di una finestra - WPF
- 6. finestra pygtk con box che ignora tutti gli eventi X (mouse) (li passa attraverso)
- 7. Controllo browser Web: come acquisire gli eventi del documento?
- 8. Ignorare gli eventi del mouse in coda
- 9. Possiamo rendere un elemento (div) trasparente agli eventi del mouse?
- 10. iPad Safari per mappare gli eventi del mouse per toccare gli eventi nelle mappe di immagini
- 11. WPF: Esiste la possibilità di "instradare" gli eventi del mouse ordinario per toccare gli eventi in Windows 7
- 12. Evento del mouse su sfondo trasparente
- 13. Come creare una finestra trasparente con pulsanti non rettangolari?
- 14. Gli eventi touch di mappatura JavaScript per gli eventi del mouse
- 15. android.R.color.transparent non completamente trasparente
- 16. nodo webkit- cattura gli eventi del mouse iframe dalla finestra principale
- 17. C# WPF finestra trasparente con un bordo
- 18. C# wpf controlli sovrapposti che non ricevono gli eventi del mouse
- 19. Silverlight 4, Eventi rotellina del mouse e Modalità senza finestra
- 20. WPF - Disegno su tela con eventi del mouse
- 21. Come acquisire l'evento di spostamento del mouse
- 22. Finestra Java trasparente
- 23. WPF: come si collegano gli eventi del mouse a un modello view?
- 24. NSViewController lento a registrare gli eventi del mouse?
- 25. È possibile SIMULARE un clic del mouse usando un mouse su e giù per gli eventi?
- 26. QGraphicsItem non riceve gli eventi di passaggio del mouse
- 27. C# - Finestra trasparente per sconfiggere i keylogger
- 28. È possibile creare una finestra trasparente usando HTML/JS/CSS?
- 29. Come reindirizzare gli eventi del mouse su un altro controllo?
- 30. Racket: utilizzando gli eventi in una finestra% telaio
finestre trasparenti possono causare problemi in generale, sono un po 'curioso perché sei andato con questo approccio. Capisco che il 3.5 SP1 abbia risolto alcuni dei principali problemi, ma è comunque un modo abbastanza pesante per intercettare l'input del mouse. Posso già prendere in consegna lo schermo, forse sarebbe meglio farlo all'interno della finestra dell'applicazione stessa? – Egor