簡體   English   中英

XAML 性能:設置畫筆的 Alpha 通道與 FrameworkElement 的不透明度

[英]XAML Performance: Set alpha channel of a brush vs. Opacity of FrameworkElement

對於需要半透明白色的給定 XAML 布局(在這種情況下提供類似玻璃的效果),哪種方法更適合設置透明度,為什么?:

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

另外,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM