在XAML中是否有办法从具有不同自定义透明度级别的命名颜色创建颜色对象? e.g。
<Label Background="{SkyBlue;220}" />
我知道这不起作用,但只是想引用一个例子。
答案 0 :(得分:28)
有一次你自己找到了答案。这是未来读者的正确方法:
<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" />
答案 1 :(得分:21)
只是为此添加一点。是的,您可以绝对设置Opacity
通过声明,如您在答案中所示,但您甚至不需要依赖属性集,您可以使用{{1}直接在十六进制中为颜色执行此操作在Alpha
值之上。例如,你有黑色的价值,你想给它一些不透明度。可以添加该值的前2个八位字节来完成相同的操作。
例如;
“#000000”=黑色(SOLID)
其中;
“#33000000”=黑色(不透明度为20%)
“#77000000”=黑色(不透明度为47%)
“#E5000000”=黑色(不透明度为90%)
在RGB
属性可能不那么容易获得或被设置为不可变的时候,只是为了提出一些细节并可能在将来帮助你。希望这会有所帮助。
ADDENDUM:值得注意的是,对像alpha这样的属性的设置总是比为整个元素设置不透明度更高效。这也适用于HTML / CSS场景,其中类似Opacity
的内容比background-color: rgba(0,0,0,.5)