2011-10-10 61 views
5

對於需要半透明白色(在此情況下提供類似玻璃效果)的給定XAML佈局,使用哪種方法設置透明度和爲什麼?:XAML性能:設置畫筆的Alpha通道與FrameworkElement的不透明度

  1. 設置畫筆的alpha通道。例如。 #12FFFFFF
  2. 設置FrameworkElement本身的不透明度,將筆刷保留爲100%白色。

此外,WPF(4.0)和Silverlight的答案不同嗎?

+0

從MSDN [Documentation](http://msdn.microsoft.com/en-us/library/bb613584.aspx#Opacity) – dowhilefor

回答

6

直接從MSDN:在刷子上與透明度

透明度上的元素

當您使用畫筆設置元素的填充或描邊,它是 最好設置畫筆.Opacity值而不是設置 元素的不透明度屬性。修改元素的不透明度屬性 可以使WPF創建一個臨時表面。

但無論如何,請注意,您仍然在導致渲染管道執行更多工作。不透明意味着它必須組合來自多個來源的像素以獲得最終的RGB值。因此,如果完全可能將透明度完全去除,而應該用不透明的畫筆進行模擬。這聽起來像你的情況可能不可能,但它往往可以。

+0

Awrite kent; ) –

+0

迎接!希望一切都在BC。 –

+0

是的,迄今爲止這麼好 –

0

這取決於你要多少個對象,以顯示(上述類型的),如何創建畫筆等等

舉例來說,如果刷在第一個例子設置爲靜態資源那麼它會被創建一次,而如果它被設置爲一個字符串Background =「#12FFFFFF」,那麼它將在每個實例化對象時創建一次。僅此一項就會對性能產生影響,儘管可以忽略

使用Brushes.White並設置不透明度意味着您將使用畫筆的單個靜態實例(白色)和不透明度常量,因此您創建的對象較少。

找出心靈的最佳方法是一個特定的測試 - 你有沒有做過任何分析?

編輯:我應該添加如果你只是創建上述幾個對象我不認爲你需要擔心性能。但對於1000年來說,明確的測試將是明智的

+0

謝謝。在這種情況下,這是一個非常複雜的繪圖,其中包含大量的GeometryDrawing對象。感謝您的回答。 –

+0

我想你可能會發現通過使用虛擬化或調整用於渲染的原語可以進行更顯着的性能改進。你見過這些鏈接嗎? http://stackoverflow.com/questions/7710569/best-performing-class-for-drawing-in-wpf/7711139#7711139 http://stackoverflow.com/questions/7560922/improving-canvas-性能 –

0

設置FrameworkElement的不透明度將設置該FrameworkElement的每個子項的不透明度。如果FrameworkElement必須有子項(按鈕,文本框或任何其他項目),則必須使用選項1.

如果它只是一個白色矩形覆蓋某物,我會說選擇2,因爲它更容易動畫不透明屬性比畫筆,以防萬一你最終會想要的。

相關問題