【发布时间】:2013-04-04 19:40:13
【问题描述】:
我想使用以下习语之一在 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 是一个结构,而不是一个类)。
【问题讨论】:
-
嗯,是的,您可以轻松编写这样的扩展方法(尽管我建议将其称为 WithAlpha 而不是 SetAlpha)。您尝试了什么,出了什么问题?
-
@JonSkeet ha,这正是我最终在回答中所说的
-
@JonSkeet 出了问题的是我不知道从哪里开始:P 对扩展方法完全陌生...
-
@heltonbiker:好的,那么您是否先尝试在 MSDN 上搜索它们?我的第一击是msdn.microsoft.com/en-gb/library/vstudio/bb383977.aspx
标签: c# extension-methods system.drawing.color