WPF渲染颜色与画笔和控件元素上的不透明度不一致

时间:2015-01-27 19:30:09

标签: wpf xaml colors opacity brush

考虑以下xaml。

<Window x:Class="PlayTabControl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <Color x:Key="HintColor" A="255" R="0" G="0" B="0"></Color>
            <SolidColorBrush x:Key="HintColorBrush" Color="{DynamicResource HintColor}" Opacity="0.26"/>
        </ResourceDictionary>
    </Window.Resources>
    <StackPanel Background="White">
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Text="Hello World, #42000000" 
                    Foreground="#42000000"
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="{StaticResource HintColorBrush}"
                    Text="Hello World, HintColorBrush @ 0.26" 
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                Text="Hello World, #68000000" 
                Foreground="#68000000"
                HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="Black"
                    Opacity="0.26"
                    Text="Hello World, Black TB@0.26" 
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="#FFbdbdbd"
                    Text="Hello World, #FFbdbdbd" 
                    HorizontalAlignment="Center"/>        
    </StackPanel>
</Window>

它产生以下结果:

enter image description here

从中得出的观察结果是Line1和Line2具有不同的颜色。第3行在视觉上是正确的,但在颜色输入方面在数值上是不正确的。 以下是Textblock的每一行。

  1. 硬编码#42000000的前景色。这大约是26%的不透明度。结果:不正确
  2. 将不透明度的刷子资源设为0.26,颜色设置为黑色。结果:不正确
  3. 校正的数字产生相同的感知输出。这在理论上是40.6%的不透明度。
  4. 使用Textblock的不透明度0.26。结果:正确
  5. #FFbdbdbd的硬编码颜色,不涉及透明度。结果:正确
  6. 我的问题是:什么/为什么wpf以不同的方式渲染?当设计师的样本/屏幕截图关注透明度时,这使得难以可靠地进行颜色样式。

    请注意,出于好奇,我也在Windows商店应用上完成了这项工作。结果就是我所期望的,除了Line3之外所有颜色都是相同的,现在它们会变得更暗,因为它更不透明。

1 个答案:

答案 0 :(得分:0)

如果也有人偶然发现此问题,则似乎将TextOptions.TextFormattingMode设置为Display似乎可以解决此问题(您可以在Window级别设置它,以便影响所有内容)。但这确实会稍微改变文本渲染的布局,因此请考虑到这一点。有关有什么区别,请参见this