在XAML中指定命名颜色的透明度级别

dot*_*NET 14 wpf xaml transparency colors

在XAML中是否有一种方法可以从具有不同自定义透明度级别的命名颜色创建颜色对象?例如

<Label Background="{SkyBlue;220}" />
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,但只想引用一个例子.

dot*_*NET 30

有一次你自己找到了答案.这是未来读者的正确方法:

<Label.Background>
    <SolidColorBrush Color="SkyBlue" Opacity=".9" />
</Label.Background>
Run Code Online (Sandbox Code Playgroud)

Opacity 范围在0到1,1之间是完全不透明(不透明).

编辑

关于@Dai的评论,如果您引用已经设置了一些透明度的颜色资源,则此方法确实不会重置或覆盖指定颜色的透明度级别.例如,如果您的资源颜色的SkyBlue透明度设置为0.5,现在您想将其设置为0.7,则上述方法将无法直接使用.

要处理这种情况,您需要做的就是创建一个Converter重置输入颜色的alpha分量的小东西.像这样的东西:

public class NoTransparencyConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  {
    var C = ((Color)value);
    return Color.FromArgb(0xFF, C.R, C.G, C.B);
  }

  public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  {
    throw new NotSupportedException();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在你的XAML中使用它:

<SolidColorBrush Color="{Binding Path="YOUR_COLOR_RESOURCE" Converter={x:Static NoTransparencyConverter}}" Opacity=".9" />
Run Code Online (Sandbox Code Playgroud)


Chr*_* W. 23

只是为这一点添加一点.是的,你可以绝对设置Opacity你在答案中显示的via声明,但你甚至不需要依赖属性集,你可以通过利用值的Alpha顶部直接在十六进制中为颜色RGB.在哪里,比如你有黑色的价值,你想给它一些不透明度.可以添加该值的前2个八位字节来完成相同的操作.

例如;

"#000000"=黑色(SOLID)

在哪里;

"#33000000"=黑色(不透明度为20%)

"#77000000"=黑色(不透明度为47%)

"#E5000000"=黑色(不透明度为90%)

只是为了在那里做一些阐述,并且可能在将来可能帮助你时,opacity财产可能不那么容易获得或被设置为不可变的.希望这可以帮助.

附录:值得注意的是,对像alpha这样的属性的设置总是比为整个元素设置不透明度更高效.这也适用于HTML/CSS场景,其中类似于Opacity比a更好的练习background-color: rgba(0,0,0,.5)

  • 谢谢克里斯。这对于将来阅读本文的人来说肯定会有帮助。您可能在这里错过的一点是,我想更改“命名”颜色的不透明度,如问题标题中所述。例如,我不知道 SkyBlue 的十六进制值是多少。 (2认同)
  • 这是#6698FF以供将来参考.所有命名的颜色最初来自十六进制,很容易找到快速访问谷歌机器.:)干杯 (2认同)
  • 如果您在 VS 中,所有命名颜色都在智能感知中为后面的代码指定了十六进制值 (2认同)