2009-11-12 76 views
3

當我不設置我的面板背景時,我無法獲得鼠標事件。爲什麼這種行爲? 默認情況下,我可以通過將透明背景設置爲null來在面板上獲取鼠標事件。 Background null和Transparent有什麼區別?Wpf面板背景問題

回答

7

Background=null渲染時不會發出任何繪圖命令MILCore,並且它不指望在命中測試控制的整個區域。

Background=Transparent,它渲染時發出一個普通的繪圖命令MILCore,它也控制命中測試的整個區域。

Brushes.Transparent實際上是一個普通的刷子與它的α(不透明度)的信道設置爲零。正因爲如此,在大多數情況下,它就像普通的顏色一樣。如果背景是普通顏色,則會檢測到鼠標點擊,因此它們也會被檢測到Brushes.Transparent

這就是說,存在代碼檢測Brushes.Transparent和完全省略繪圖命令優化它帶走了幾個地方。例如,這發生在窗口透明與操作系統的交互中:操作系統沒有被通知任何塗有Brushes.Transparent的區域是應用程序的一部分,因此單擊它不會執行任何操作。這是通過特殊外殼Brushes.Transparent爲此目的完成的。

+0

是否在MILCore上執行所有渲染? – viky 2009-11-12 09:07:07

+0

MILCore是微軟的WPF本地(非託管)部分的名稱,用於維護渲染數據,通過通道編組它(用於遠程處理)並調用Direct3D執行實際渲染。最準確的說,它是你的顯卡的驅動程序和硬件來完成實際的渲染,如果顯卡無法實現它,則會回退到軟件。視頻卡的驅動程序通過Direct3D定義的接口訪問,Direct3D由WPF的非託管角色「MILCore」調用。 – 2009-11-12 18:44:02

+0

感謝您的一切幫助 – viky 2009-11-13 04:36:08