Criar uma janela WPF totalmente transparente para os eventos do mouse captura
-
22-07-2019 - |
Pergunta
Eu estou tentando eventos do mouse armadilha em WPF usando um, transparente janela não-modal superior. Eu estou achando que esta multa funciona se a opacidade da janela é de 0,01 ou superior e tem uma cor de fundo, mas quando a opacidade é definida como 0 já não recebe mensagens de mouse. Existe uma maneira fazer esta janela olhar totalmente transparente e ainda obter a entrada do mouse?
Solução
Tanto quanto eu sei, não.
Quando um Control
ou Window
é totalmente transparente, pode então ser clicado através. Este é o caso, se você definir o seu Window.Background="Transparent"
, ou Opacity="0"
. Tanto quanto eu sei, isso é por design em WPF.
Ao usar uma opacidade de 0,01, você deve apenas ver a janela, se em tudo. Esta é provavelmente a sua melhor aposta em alcançar a funcionalidade.
Editar: Outra solução, que eu tentei e não funciona, é para definir a cor de fundo para uma cor quase transparente. Eu costumava Background="#01000000"
, dando assim um valor alfa de 1. Isso faz com que o seu fundo janela transparente de aparência, mas permite-lhe controles lugar sobre ele com a janela na opacidade total.
Outras dicas
No Visual Studio 2010: Selecione sua janela na sua opinião design.
Defina as propriedades de sua janela para:
- AllowsTransparency: verificá-lo
- Fundo: Transparente
- WindowStyle: Nenhum
Apenas set Background = Brushes.Transparent em vez de fundo = null.
Você não precisa usar opacidade em tudo (ie. Deixá-lo a 100% de opacidade).
Por exemplo, eu acho que seu nome controle é MyGrid
e quer que ele seja Transparent
e sempre obter MouseOverEvent
.....
Se (janela AllowsTransparency
é True
e o Background
janela é Transparent
) seguida
uso a cor como
#01777777
paraMyGrid
Background
ou0.01
paraMyGrid
Opacity
.
Else
uso algo como
#00777777
paraMyGrid
Background
ou0.00
paraMyGrid
Opacity
.
Como definir a opacidade para 100% (ou qualquer valor diferente de zero), eo fundo para transparente (em vez de null) deve fazer a maioria dos controles hittable.
Certifique-se de definir IsHitTestVisible para true. Nem todos os controles podem ser atingido, mesmo se a opacidade é 100% eo fundo é transparente.
Você pode achar que é mais simples de usar Mouse.Capture
.
https://msdn.microsoft.com/en-us/library/ ms771301.aspx
Quando um objeto captura o mouse, todos os eventos relacionados mouse são tratados como se o objeto com a captura do mouse realizar o evento, mesmo que o ponteiro do mouse está sobre um outro objeto.