我想使用以下一种习语在C#(而不是XAML)中创建颜色:
Color transparentblue = TransparentColor(Brushes.Blue, 0.5); // 0.5 => 128
Color transparentblue = Brushes.Blue.SetAlpha(0.5); // again, 0.5 => 128
我想摆脱Color.FromArgb()
语法,这根本不是设计师友好的。我也使用静态类中的静态方法,但写作有点沉重:
public static class ColorGenerators {
public static Color GetTransparentColor (Color color, double opacity) {
byte op = (byte)(opacity*255);
return Color.FromArgb(op, color.R, color.G, color.B);
}
}
// To be used as
var transparentblue = ColorGenerators.GetTransparentColor(Color.Blue, 0.5);
我仍然更喜欢扩展方法,在我看来很快我们的公司将受益于类似this question中描述的方法,所以我想知道它们会是什么样的(假设Color是结构,而不是类。)
答案 0 :(得分:2)
这样的事情怎么样:
public static class ColorExtensions
{
public static Color WithAlpha(this Color color, double opacity)
{
byte op = (byte)(opacity*255);
return Color.FromArgb(op, color.R, color.G, color.B);
}
}
键是第一个参数中的this
关键字。那个(以及static
类中的static
方法)向编译器指示这是一个扩展方法。
Color transparentblue = Color.Blue.WithAlpha(0.5);
进一步阅读