WPF渲染颜色在刷子和控件元素的不透明度上存在不一致性

4

考虑以下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的颜色不同。在视觉上,Line3是正确的,但在颜色输入方面是不正确的。
下面是对Textblock中每一行所做的处理:
1. 硬编码前景色为#42000000,大约为26%的不透明度。结果:不正确 2. 使用不透明度为0.26的Brush资源,并将颜色设置为黑色。结果:不正确 3. 通过修正数字来产生相同的感知输出。理论上是40.6%的不透明度。 4. 使用Textblock的不透明度0.26。结果:正确 5. 硬编码颜色为#FFbdbdbd,没有透明度。结果:正确
我的问题是:WPF为什么会呈现出不同的效果?这使得在设计师的样本/截图中涉及透明度时,很难可靠地进行颜色样式。
需要注意的是,出于好奇心,我也在Windows商店应用程序上这样做了。结果是我所期望的,除了Line3会更暗以外,所有颜色都是相同的。

你需要研究RGBa和Opacity之间的区别。 - Chris W.
@ChrisW。你的观点是什么?如果你将不同的画笔和不透明度应用于文本以外的其他内容(例如线条的描边),你就不会注意到这些差异。 - Clemens
@Clemens 对不起,显然如果有具体的问题,我会提供具体的答案。虽然我认为我对罪犯有一个很好的想法,但我需要回来看看,当我有更多的空闲时间,而不是只留下一个模糊的方向性回应。干杯 - Chris W.
@ChrisW。嗯,我很好奇... - Clemens
@Clemens 我知道你是朋友,我也是 :D - Chris W.
之前有类似的问题被问到过(https://dev59.com/RVjUa4cB1Zd3GeqPWfxx),但并没有一个令人满意的回答。 - Clemens
1个回答

1
如果有人也遇到了这个问题,看起来将TextOptions.TextFormattingMode设置为Display似乎可以解决问题(您可以在窗口级别设置它以影响所有内容)。但是这确实会稍微改变文本呈现布局,因此请考虑这一点。有关详细信息,请参见this

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接