2

我想使用以下习语之一在 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);

我仍然更喜欢扩展方法方法,在我看来,我们公司很快就会从类似于这个问题中描述的方法中受益,所以我想知道它们会是什么样子(鉴于 Color 是一个结构,而不是一个类)。

4

1 回答 1

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);

延伸阅读

于 2013-04-04T19:43:51.863 回答