访问WPF的所有颜色,但在Silverlight中

时间:2009-07-30 00:37:33

标签: silverlight colors

在Silverlight中设置XAML中的颜色时,可以使用多种颜色,但在以编程方式处理设置颜色时,选项似乎有限。

例如,在Silverlight XAML中,我可以将背景设置为“Alice Blue”,“Antique White”等。

但是如果我尝试在代码隐藏中设置相同的背景,我只能基于Colors类来限定一组相当有限的颜色......黑色,蓝色,棕色......白色, 黄色。这些类似于:

uxPanel.Background = new SolidColorBrush (Colors.Green);

我知道我可以通过RGB值设置任何我想要的颜色,例如(其中colorsString类似于“112345”):

var brush = new SolidColorBrush ();
var c = new Color
            {
                A = 0xFF,
                R = Convert.ToByte (colorString.Substring (0, 2), 16),
                G = Convert.ToByte (colorString.Substring (2, 2), 16),
                B = Convert.ToByte (colorString.Substring (4, 2), 16)
            };

brush.Color = c;

return (brush);

但是,我如何利用XAML中可访问的各种颜色名称或通过样式,但在我的代码隐藏中以编程方式设置?或者这在Silverlight中是不可能的?

2 个答案:

答案 0 :(得分:2)

有人在silverlight.net posted code重新创建C#中的XAML颜色。

答案 1 :(得分:1)

我不确定我理解这个问题。在我的XAML代码隐藏中,我可以通过Colors对象访问诸如“Antique White”之类的颜色:

var c = Colors.AntiqueWhite;

它与您在XAML中可以访问的颜色不同。

无论我引用System.Drawing.Color还是System.Windows.Media.Colors,都可以使用AntiqueWhite等颜色。

修改

所以看起来你正在特别谈论System.Windows.Media.Colors class in Silverlight,它确实只给你一组有限的颜色。多奇怪啊!

我想最简单的方法是使用MSDN documentation on the WPF version中的ARGB值定义自己的类。类似的东西:

public static class ExtraColors
{
    private static Color _antiqueWhite = Color.FromArgb(0xFF, 0xFA, 0xEB, 0xD7);
    // etc

    public static Color AntiqueWhite { get { return _antiqueWhite; } }
    // etc
}

我知道,这很尴尬,但它至少可以为您提供可读代码的可读列表。