【发布时间】:2015-03-26 12:56:24
【问题描述】:
考虑以下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>
它产生以下结果:
从中可以看出 Line1 和 Line2 的颜色不同。第 3 行在视觉上是正确的,但在颜色输入方面数字不正确。 这是对每一行 Textblock 所做的操作。
- #42000000 的硬编码前景色。这大约是 26% 的不透明度。结果:不正确
- 不透明度为 0.26 的画笔资源,颜色设置为黑色有效。结果:不正确
- 产生相同感知输出的更正数字。理论上是 40.6% 的不透明度。
- 使用文本块的不透明度 0.26。结果:正确
- #FFbdbdbd 的硬编码颜色,不涉及透明度。结果:正确
我的问题是:wpf 以不同的方式呈现什么/为什么?当设计师的示例/屏幕截图涉及透明度时,这使得可靠地进行颜色样式设置变得困难。
请注意,出于好奇,我也在 Windows 商店应用中完成了此操作。结果是我所期望的,除了 Line3 之外,所有颜色都相同,它现在变得更暗,因为它更不透明。
【问题讨论】:
-
你会想要研究 RGBa 和 Opacity 之间的区别
-
@ChrisW。你想说什么?如果您将不同的画笔和不透明度应用于文本以外的其他内容(例如线条的笔划),您不会注意到这些差异。
-
@Clemens 是的,对此很抱歉,很明显,如果有一个具体点,我会提供一个具体的答案。虽然我认为我对罪魁祸首有一个好主意,但当我有更多空闲时间时,我将不得不回过头来,而不是仅仅留下模糊的方向性反应。干杯
-
@ChrisW。好吧,我很好奇……
-
@Clemens 我知道你是朋友,我也是:D
标签: wpf xaml colors opacity brush