Xamarin.Forms中的颜色

Download Sample下载示例

使用Color结构,可以将颜色指定为红-绿-蓝 (RGB) 值、色调-饱和度-发光度 (HSL) 值、色调-饱和度-值 (HSV) 值或颜色名称。 还可以使用 alpha 通道来指明透明度。

可以使用Color构造函数创建Color对象,该构造函数可用于指定灰色阴影RGB 值包含透明度的 RGB 值。 在所有情况下,参数都是double介于 0 到 1 的值。

还可以使用静态方法创建Color对象:

  • Color.FromRgb:用于创建介于 0 和 1 范围之间的double RGB 值。
  • Color.FromRgb:用于创建从 0 到 255 的整数 RGB 值。
  • Color.FromRgba:用于创建包含透明度的double RGB 值。
  • Color.FromRgba:用于创建包含透明度的整数 RGB 值。
  • Color.FromHsla:用于创建包含透明度的double HSL 值。
  • Color.FromHsv:用于从 0 到 1 的double HSV 值。
  • Color.FromHsv:用于创建从 0 和 255 的整数 HSV 值。
  • Color.FromHsva:用于创建包含透明度的double HSV 值。
  • Color.FromHsva:用于创建包含透明度的整数 HSV 值。
  • Color.FromUint:用于创建uint值,计算公式为 (B + 256 * (G + 256 * (R + 256 * A)))。
  • Color.FromHex:用于创建十六进制数字格式的 string,格式为“#AARRGGBB”、“#RRGGBB”、“#ARGB”或“#RGB”,其中每个字母分别对应 alpha 通道、红色通道、绿色通道和蓝色通道的十六进制数字。

Color 对象一旦创建就不可改变。 可以从下面的属性获取颜色特征:

  • R,表示颜色的红色通道。
  • G,表示颜色的绿色通道。
  • B,表示颜色的蓝色通道。
  • A,表示颜色的 alpha 通道。
  • Hue,表示颜色的色调通道。
  • Saturation,表示颜色的饱和度通道。
  • Luminosity,表示颜色的亮度通道。

这些属性都是从 0 到 1 的double值。

命名的颜色

Color结构还定义了 240 个公共静态只读字段,用于AliceBlue等常见颜色。

Color.Accent

Color.Accent 值生成特定于平台(有时为用户可选择)的颜色,它在深色或浅色背景上都是可见的。

Color.Default

Color.Default值定义Color,所有通道都设置为 -1,旨在强制实施平台的配色方案。 因此,它在不同平台的不同上下文中具有不同的含义。 默认情况下,平台的配色方案为:

  • iOS:浅色背景上深色文本。
  • Android:浅色背景上深色文本。
  • Windows:浅色背景上深色文本。

Color.Transparent

Color.Transparent值定义Color,所有通道都设置为零。

修改颜色

多个实例方法允许通过修改现有颜色来新建颜色:

  • AddLuminosity修改提供的增量的亮度以返回Color
  • MultiplyAlpha修改 alpha 以返回Color,将其乘以提供的 alpha 值。
  • ToHex 返回 Color 的十六进制 string 表示形式。
  • WithHue返回Color,将色调替换为提供的值。
  • WithLuminosity返回Color,将亮度替换为提供的值。
  • WithSaturation返回Color,将饱和度替换为提供的值。

隐式转换

可以执行Xamarin.Forms.ColorSystem.Drawing.Color类型之间的隐式转换:

Xamarin.Forms.Color xfColor = Xamarin.Forms.Color.FromRgb(0, 72, 255);
System.Drawing.Color sdColor = System.Drawing.Color.FromArgb(38, 127, 0);

// Implicity convert from a Xamarin.Forms.Color to a System.Drawing.Color
System.Drawing.Color sdColor2 = xfColor;

// Implicitly convert from a System.Drawing.Color to a Xamarin.Forms.Color
Xamarin.Forms.Color xfColor2 = sdColor;

示例

在 XAML 中,颜色通常使用其命名值或十六进制表示形式进行引用:

<Label Text="Sea color"
       TextColor="Aqua" />
<Label Text="RGB"
       TextColor="#00FF00" />
<Label Text="Alpha plus RGB"
       TextColor="#CC00FF00" />
<Label Text="Tiny RGB"
       TextColor="#0F0" />
<Label Text="Tiny Alpha plus RGB"
       TextColor="#C0F0" />

注意

使用 XAML 编译时,颜色名称不区分大小写,因此可以小写。 有关 XAML 编译的详细信息,请参阅 XAML 编译

在 C# 中,颜色通常使用其命名值或通过其静态方法进行引用:

Label red    = new Label { Text = "Red",    TextColor = Color.Red };
Label orange = new Label { Text = "Orange", TextColor = Color.FromHex("FF6A00") };
Label yellow = new Label { Text = "Yellow", TextColor = Color.FromHsla(0.167, 1.0, 0.5, 1.0) };
Label green  = new Label { Text = "Green",  TextColor = Color.FromRgb (38, 127, 0) };
Label blue   = new Label { Text = "Blue",   TextColor = Color.FromRgba(0, 38, 255, 255) };
Label indigo = new Label { Text = "Indigo", TextColor = Color.FromRgb (0, 72, 255) };
Label violet = new Label { Text = "Violet", TextColor = Color.FromHsla(0.82, 1, 0.25, 1) };

以下示例使用 OnPlatform 标记扩展选择性设置 ActivityIndicator 的颜色:

<ActivityIndicator Color="{OnPlatform iOS=Black, Default=Default}"
                   IsRunning="True" />

等效 C# 代码如下:

ActivityIndicator activityIndicator = new ActivityIndicator
{
    Color = Device.RuntimePlatform == Device.iOS ? Color.Black : Color.Default,
    IsRunning = true
};