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