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

标签 wpf xaml colors transparency

XAML 中有没有办法从具有不同自定义透明度级别的命名颜色创建颜色对象?例如

<Label Background="{SkyBlue;220}" />

我知道这行不通,但只是想举个例子。

最佳答案

你自己找到答案的时候之一。这是任何 future 读者的正确方法:

<Label.Background>
    <SolidColorBrush Color="SkyBlue" Opacity=".9" />
</Label.Background>
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();
  }
}

然后在您的 XAML 中使用它:
<SolidColorBrush Color="{Binding Path="YOUR_COLOR_RESOURCE" Converter={x:Static NoTransparencyConverter}}" Opacity=".9" />

关于wpf - 在 XAML 中指定命名颜色的透明度级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15114651/

相关文章:

wpf - 根据 DataContext 的类型选择用户控件

c# - .xaml 和 .xaml.cs 文件之间有什么联系

colors - 在 odoo 10 中向状态栏添加颜色

java - 如何从 ssh 输出中删除颜色等

c - 如何将一个 8 位颜色值拆分为两个 4 位颜色值?

c# - 如何在 C# 中闪烁整个屏幕?

c# - 如何序列化dll中的对象?

c# - 设置绑定(bind)的边距

c# - WPF - 发送 key Redux

c# - 在所有桌面上的任何窗口上的 WPF 中捕获 'text entering'