XAML性能:设置画笔的Alpha通道与FrameworkElement的不透明度

时间:2011-10-10 09:37:33

标签: .net wpf silverlight performance xaml

对于需要半透明白色的给定XAML布局(在这种情况下提供类似玻璃的效果),哪种方法更适合设置透明度以及为什么?:

  1. 设置画笔的Alpha通道。例如。 #12FFFFFF
  2. 设置FrameworkElement本身的不透明度,使画笔保持100%白色。
  3. 另外,WPF(4.0)和Silverlight的答案有何不同?

3 个答案:

答案 0 :(得分:7)

直接来自MSDN

  

画笔的不透明度与元素的不透明度

     

当您使用画笔设置元素的填充或描边时,它是   最好设置Brush.Opacity值而不是设置   element的Opacity属性。修改元素的Opacity属性   可以导致WPF创建临时表面。

但无论如何,请注意您仍然会使渲染管道做更多的工作。不透明度意味着必须组合来自多个源的像素才能得出最终的RGB值。因此,如果完全可以完全去除透明度,而是使用不透明的刷子来模拟透明度,那么你应该这样做。听起来在你的情况下这可能是不可能的,但它通常可以。

答案 1 :(得分:0)

取决于您要显示的对象数量(上述类型),刷子的创建方式等...

例如,如果在第一个示例中将画笔设置为StaticResource,则创建一次,而如果将其设置为字符串Background =“#12FFFFFF”,则每次实例化该对象时将创建一次。仅这一点就会产生性能影响,但可以忽略不计

使用Brushes.White并设置不透明度意味着您将使用画笔的单个静态实例(白色)和不透明度常量,这样您就可以创建更少的对象。

找出心灵的最好方法是进行特定测试 - 你做过任何剖析吗?

编辑:我应该添加,如果你只是创建了一些上述对象,我认为你不需要担心性能。然而,对于1000,特定的测试是明智的

答案 2 :(得分:0)

设置FrameworkElement的不透明度将设置该FrameworkElement的每个子项的不透明度。如果FrameworkElement必须有子项(按钮,文本框或任何其他项),则必须使用选项1.

如果它只是一个覆盖某个东西的白色矩形,我会说选择2,因为它比画笔更容易设置Opacity属性的动画,以防你最终想要它。