我要創建使用下列成語的一個C#(不XAML)顏色:基於另一種顏色和alpha創建System.Drawing.Color的擴展方法或子類?
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)。你試過了什麼,出了什麼問題? – 2013-04-04 19:42:37
@JonSkeet哈,正是我最後稱之爲我的回答 – 2013-04-04 19:44:40
@JonSkeet出了什麼問題,我不知道從哪裏開始:P完全新的擴展方法... – heltonbiker 2013-04-04 19:46:35