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?

Foi útil?

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 para MyGrid Background ou 0.01 para MyGrid Opacity.

Else

uso algo como #00777777 para MyGrid Background ou 0.00 para MyGrid 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top