Создать полностью прозрачное окно WPF для захвата событий мыши - PullRequest
12 голосов
/ 29 октября 2009

Я пытаюсь перехватить события мыши в WPF с помощью верхнего прозрачного немодального окна. Я считаю, что это работает нормально, если непрозрачность окна составляет 0,01 или больше, и у него есть цвет фона, но когда непрозрачность установлена ​​на 0, он больше не получает сообщения мыши. Есть ли способ, чтобы это окно выглядело полностью прозрачным и по-прежнему получать ввод мыши?

Ответы [ 6 ]

30 голосов
/ 29 октября 2009

Насколько я знаю, нет.

Когда Control или Window полностью прозрачен, его можно щелкнуть. Это тот случай, если вы установили Window.Background="Transparent" или Opacity="0". Насколько я знаю, это сделано в WPF.

При использовании непрозрачности 0,01, вы должны едва видеть окно, если оно вообще есть. Это, вероятно, ваш лучший выбор для достижения функциональности.

Редактировать: Другое решение, которое я пробовал и работает, - установить цвет фона почти прозрачным. Я использовал Background="#01000000", в результате чего значение альфа составляло 1. Это делает фон окна прозрачным, но позволяет размещать на нем элементы управления с окном с полной непрозрачностью.

12 голосов
/ 17 ноября 2010

В Visual Studio 2010: Выберите окно в представлении дизайна.

Установите свойства вашего окна на:

  • AllowsTransparency: проверьте это
  • Фон: прозрачный
  • WindowStyle: Нет
3 голосов
/ 29 октября 2009

Просто установите Background = Brushes.Transparent вместо Background = null.

Вам вообще не нужно использовать непрозрачность (т. Е. Просто оставьте непрозрачность 100%).

1 голос
/ 18 августа 2015

Например, я думаю, что ваше контрольное имя MyGrid, и вы хотите, чтобы оно было Transparent и всегда получало MouseOverEvent .....

Если (окно AllowsTransparency равно True и , окно Background равно Transparent) Тогда

используйте цвет, подобный #01777777 для MyGrid Background или 0.01 для MyGrid Opacity.

Остальное

используйте что-то вроде #00777777 для MyGrid Background Или 0.00 для MyGrid Opacity.

0 голосов
/ 23 июля 2016

Возможно, вам будет проще использовать Mouse.Capture.

https://msdn.microsoft.com/en-us/library/ms771301.aspx

Когда объект захватывает мышь, все связанные с мышью события обрабатываются так, как будто объект с захватом мыши выполняет событие, даже если указатель мыши находится над другим объектом.

0 голосов
/ 29 октября 2009

Установка непрозрачности на 100% (или любое ненулевое значение), а фон прозрачный (вместо нуля) должен сделать большинство элементов управления доступными.

Убедитесь, что для IsHitTestVisible установлено значение true. Не все элементы управления могут быть поражены, даже если непрозрачность равна 100%, а фон прозрачный.

...