2009-10-29 65 views
11

我想通過使用最頂層的透明非模態窗口來捕獲WPF中的鼠標事件。我發現如果窗口的不透明度爲0.01或更高,並且它具有背景顏色,那麼此工作正常,但當不透明度設置爲0時,它不再接收鼠標消息。有沒有辦法讓這個窗口看起來完全透明,並仍然得到鼠標輸入?創建一個完全透明的WPF窗口來捕獲鼠標事件

+0

透明窗口可能會導致一般問題,我有點好奇你爲什麼採用這種方法。我知道3.5 SP1解決了一些主要問題,但仍然是一種非常沉重的方式來捕捉鼠標輸入。我已經可以接管屏幕了,也許在應用程序窗口本身內執行此操作會更好? – Egor 2009-11-01 09:26:54

回答

28

據我所知,沒有。

當一個ControlWindow是完全透明的,它可以被點擊。如果您設置了Window.Background="Transparent"Opacity="0",則是這種情況。據我所知,這是WPF設計的。

當使用0.01的不透明度時,您應該幾乎看不到窗戶。這可能是您實現功能的最佳選擇。

編輯:另一種解決方案,我試過並且確實有效,是將背景色設置爲幾乎透明的顏色。我使用了Background="#01000000",因此alpha值爲1.這使得您的窗口背景透明,但允許您在完全不透明的窗口上放置控件。

+0

是的,我找不到解決方法。這說得通。 – 2009-10-29 20:52:16

+0

請參閱我的編輯以獲取其他解決方案。您可以將背景更改爲接近透明的顏色,並且仍然保持窗口處於完全不透明狀態,以便在屏幕上覆蓋一些控件。 – 2009-10-29 20:56:27

+0

第二種解決方案確實有效,但它看起來與將不透明度設置爲0.01相同。 – 2009-10-29 21:25:03

3

只需設置Background = Brushes.Transparent而不是Background = null。

根本不需要使用不透明度(即將它保持在100%不透明度)。

+4

我試過了,想着同樣的可能性,但它不起作用。當背景透明時,程序不會捕獲點擊,而是抓取下面的任何程序。 – 2009-10-29 20:49:58

+0

你能舉個例子嗎?我使用這種方法(通常#00000000,因爲它很容易輸入),它似乎對我來說工作得很好。 – Egor 2009-11-01 09:15:36

0

將不透明度設置爲100%(或任何非零值),透明背景(而不是空值)應使大多數控件可以使用。

確保將IsHitTestVisible設置爲true。即使不透明度爲100%並且背景透明,也不是所有的控件都可以被擊中。

+0

也許我做錯了什麼,但是當我使用這些設置在窗口上進行顯示時,它根本不會顯示(即,當您使用Alt + Tab時窗口不存在)。 – 2009-10-29 21:55:18

12

在Visual Studio 2010中: 在您的設計視圖中選擇您的窗口。

設置你的窗口的屬性:

  • AllowsTransparency:檢查
  • 背景:透明
  • WindowStyle:無
+2

不知道爲什麼這沒有得到任何+1,它完美的作品! – JMK 2012-07-13 16:31:28

+1

@JMK因爲這會使點擊穿過窗口,除非你在窗口內部打開了一個實際的控件。 – prettyvoid 2015-08-11 16:20:31

+0

我的關鍵是「AllowsTransparency」 – ariel 2016-12-29 17:14:02

1

例如,我覺得你的控件名稱是MyGrid和你想要它Transparent,總是得到MouseOverEvent .....

如果(窗口AllowsTransparencyTrue窗口BackgroundTransparent然後

使用色性好#01777777MyGridBackground或者0.01MyGridOpacity

否則

使用#00777777MyGridBackground或者0.00MyGridOpacity

相關問題