Silverlight/WPF 用十六进制颜色设置椭圆

Posted

技术标签:

【中文标题】Silverlight/WPF 用十六进制颜色设置椭圆【英文标题】:Silverlight/WPF sets ellipse with hexadecimal colour 【发布时间】:2010-10-21 11:14:26 【问题描述】:

我正在尝试在后面的代码中设置椭圆对象的颜色。到目前为止,我是通过使用 SolidColorBrush 方法来完成的。有没有办法像在 CSS 中一样以十六进制插入颜色值?

这是我正在使用的代码:

ellipse.Fill = new SolidColorBrush(Colors.Yellow);

【问题讨论】:

考虑到大多数 XAML 使用十六进制字符串作为颜色,您不能在 Silverlight 中执行此操作很奇怪。因此,他们拥有代码,但他们并没有以在代码隐藏 (C#) 中使用的方式向我们其他人公开它。 【参考方案1】:

这样的事情会起作用

ellipse.Fill = 
    new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF00DD")); 

(编辑:看起来这只是 WPF。Alex Golesh has a blog post here 关于他的 Silverlight ColorConverter)

虽然我更喜欢Color.FromRgb 方法

byte r = 255;
byte g = 0;
byte b = 221;
ellipse.Fill = new SolidColorBrush(Color.FromRgb(r,g,b)); 

【讨论】:

我需要继承什么才能使用 ColorConverter? 在 WPF 中它在 System.Windows.Media 中,在 Silverlight 中,它不是。查看我的编辑。【参考方案2】:

我写了一个简单的color converter function 来解决这个问题。快乐的面孔实际上是数字 8 和括号,如下所示:8)。

【讨论】:

【参考方案3】:

来自MSDN

SolidColorBrush mySolidColorBrush = new SolidColorBrush();

// Describes the brush's color using RGB values. 
// Each value has a range of 0-255.
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);
myRgbRectangle.Fill = mySolidColorBrush;   

【讨论】:

【参考方案4】:

当然,您也可以这样做(使用 FromArgb 函数中的十六进制数字):

SolidColorBrush mySolidColorBrush = new SolidColorBrush();

// Describes the brush's color using RGB HEX values. 
// Each value has a range of 0-255. Use 0x for HEX numbers
mySolidColorBrush.Color = Color.FromArgb(255, 0xFF, 0xC0, 0xD0);
myRgbRectangle.Fill = mySolidColorBrush;

【讨论】:

【参考方案5】:

对于使用十六进制值:

 your_contorl.Color = DirectCast(ColorConverter.ConvertFromString("#D8E0A627"), Color)

【讨论】:

【参考方案6】:

另一个,小巧,快速且有用:

public static Color ToColor(this uint argb)

    return Color.FromArgb((byte)((argb & -16777216) >> 0x18),
                          (byte)((argb & 0xff0000) >> 0x10),
                          (byte)((argb & 0xff00) >> 8),
                          (byte)(argb & 0xff));

在代码中使用:

SolidColorBrush scb  = new SolidColorBrush (0xFFABCDEF.ToColor());

当然需要使用 0xFFFFFFFF (uint) 表示法而不是 "#FFFFFFFF" (string),但我相信这没什么大不了的。

【讨论】:

【参考方案7】:

我认为这会起作用,因为它适用于文本框。

var bc = new BrushConverter();
textRichTextBoxEditor.Foreground = (Brush)bc.ConvertFrom("#FF97315A");

访问http://soulsolutions.com.au/Blog/tabid/73/EntryId/617/Using-Hex-Colour-values-to-set-Foreground-in-WPF.aspx

【讨论】:

以上是关于Silverlight/WPF 用十六进制颜色设置椭圆的主要内容,如果未能解决你的问题,请参考以下文章

在 Silverlight/WPF 中绑定复杂属性

如何在 Silverlight/WPF 中反转剪裁几何?

.NET 开发的未来:ASP.NET 还是 WPF/Silverlight/Winforms? [关闭]

VBA研究关于单元格颜色值的十六进制赋值

用CSS怎么设置网页的背景色

使用十六进制设置颜色