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

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

这是我正在使用的代码:

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

【问题讨论】:

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

标签: wpf silverlight


【解决方案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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-09-26
              • 2023-03-12
              • 1970-01-01
              • 2017-01-22
              • 2019-06-16
              • 2021-03-08
              相关资源
              最近更新 更多