[英]XAML Performance: Set alpha channel of a brush vs. Opacity of FrameworkElement
對於需要半透明白色的給定 XAML 布局(在這種情況下提供類似玻璃的效果),哪種方法更適合設置透明度,為什么?:
#12FFFFFF
另外,WPF (4.0) 和 Silverlight 的答案不同嗎?
直接來自MSDN :
畫筆不透明度與元素不透明度
當您使用 Brush 設置元素的 Fill 或 Stroke 時,最好設置 Brush.Opacity 值而不是設置元素的 Opacity 屬性。 修改元素的 Opacity 屬性會導致 WPF 創建臨時表面。
但無論如何,請注意您仍在導致渲染管道做更多的工作。 不透明度意味着它必須結合來自多個來源的像素才能得出最終的 RGB 值。 因此,如果有可能完全去除透明度並用不透明畫筆模擬它,那么您應該這樣做。 聽起來在您的情況下這可能是不可能的,但通常可以。
這取決於您要顯示多少個對象(上述類型),如何創建 Brush 等...
例如,如果在第一個示例中將畫筆設置為 StaticResource,則將其創建一次,而如果將其設置為字符串 Background="#12FFFFFF",則每次對象實例化時都會創建一次。 僅此一項就會對性能產生影響,盡管可以忽略不計
使用 Brushes.White 並設置不透明度意味着您將使用畫筆(白色)和不透明度常量的單個靜態實例,因此您創建的對象更少。
找出心智的最好方法是進行特定的測試——你做過任何分析嗎?
編輯:如果您只創建上述幾個對象,我應該補充一點,我認為您不需要擔心性能。 然而,對於 1000 次,進行特定的測試是明智的
設置 FrameworkElement 的不透明度將設置該 FrameworkElement 的每個子項的不透明度。 如果 FrameworkElement 必須有子元素(按鈕、文本框或任何其他項),則必須使用選項 1。
如果它只是一個覆蓋某些東西的白色矩形,我會說選擇選項 2,因為它比畫筆更容易為 Opacity 屬性設置動畫,以防您最終需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.