Создайте полностью прозрачное окно WPF для захвата событий мыши

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

Задайте свойства вашего окна:

  • AllowsTransparency: проверьте его
  • Фон: прозрачный
  • WindowStyle: None

Ответ 3

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

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

Ответ 4

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

Если (окно AllowsTransparency равно True и, окно Background равно Transparent) Затем

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

Else

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

Ответ 5

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

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

Ответ 6

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

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

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