【问题标题】:convert from Color to brush从颜色转换为画笔
【发布时间】:2011-08-04 04:58:26
【问题描述】:

如何在 C# 中将 Color 转换为 Brush

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这是给ColorBrush....

    你不能转换它,你必须制作一个新的画笔......

    SolidColorBrush brush = new SolidColorBrush( myColor );
    

    现在,如果您在 XAML 中需要它,您可以制作一个自定义值转换器并在绑定中使用它

    【讨论】:

    • 为了向后兼容,最好使用从 .NET Framework 1.1 开始提供的SolidBrush (System.Drawing),而不是从 .NET Framework 1.1 开始提供的 SolidColorBrush (System.Windows.Media) .NET 框架 3.0。
    【解决方案2】:
    Brush brush = new SolidColorBrush(color);
    

    反过来:

    if (brush is SolidColorBrush colorBrush)
        Color color = colorBrush.Color;
    

    或者类似的东西。

    并不是所有画笔都是颜色,但您可以将所有颜色变成 (SolidColor)Brush。

    【讨论】:

    • 刷上颜色!
    • @raiserle:供您参考,问题内容以前是I want to convert from Brush to Color in c#,而标题是相反的。
    【解决方案3】:
    SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )
    

    【讨论】:

      【解决方案4】:

      你可以用这个:

      new SolidBrush(color)
      

      颜色是这样的:

      Color.Red
      

      Color.FromArgb(36,97,121))
      

      或者...

      【讨论】:

      • 为了向后兼容,这个答案更好,因为SolidBrush (System.Drawing) 从 .NET Framework 1.1 开始可用,而 SolidColorBrush (System.Windows.Media) 从 .NET Framework 开始可用3.0.
      【解决方案5】:

      如果您碰巧正在使用混合了 Windows 窗体和 WPF 的应用程序,您可能会遇到尝试将 System.Drawing.Color 转换为 System.Windows.Media.Color 的额外复杂性。 我不确定是否有更简单的方法可以做到这一点,但我是这样做的:

      System.Drawing.Color MyColor = System.Drawing.Color.Red;
      System.Windows.Media.Color = ConvertColorType(MyColor);
      
      System.Windows.Media.Color ConvertColorType(System.Drawing.Color color)
      {
        byte AVal = color.A;
        byte RVal = color.R;
        byte GVal = color.G;
        byte BVal = color.B;
      
        return System.Media.Color.FromArgb(AVal, RVal, GVal, BVal);
      }
      

      然后您可以使用前面提到的一种技术转换为画笔。

      【讨论】:

        【解决方案6】:

        通常使用兄弟或父母的画笔就足够了,并且通过检索它们的 Foreground 或 Background 属性在 wpf 中很容易获得。

        参考:Control.Background

        【讨论】:

          【解决方案7】:

          我之前也遇到过同样的问题,这是我的课程解决了颜色转换 使用它并享受它:

          来吧,使用我的类进行多色转换

          using System;
          using System.Windows.Media;
          using SDColor = System.Drawing.Color;
          using SWMColor = System.Windows.Media.Color;
          using SWMBrush = System.Windows.Media.Brush;
          
          //Developed by امین امیری دربان
          namespace APREndUser.CodeAssist
          {
              public static class ColorHelper
              {
                  public static SWMColor ToSWMColor(SDColor color) => SWMColor.FromArgb(color.A, color.R, color.G, color.B);
                  public static SDColor ToSDColor(SWMColor color) => SDColor.FromArgb(color.A, color.R, color.G, color.B);
                  public static SWMBrush ToSWMBrush(SDColor color) => (SolidColorBrush)(new BrushConverter().ConvertFrom(ToHexColor(color)));
                  public static string ToHexColor(SDColor c) => "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
                  public static string ToRGBColor(SDColor c) => "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
                  public static Tuple<SDColor, SDColor> GetColorFromRYGGradient(double percentage)
                  {
                      var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255;
                      var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255;
                      var blue = 0.0;
                      SDColor result1 = SDColor.FromArgb((int)red, (int)green, (int)blue);
                      SDColor result2 = SDColor.FromArgb((int)green, (int)red, (int)blue);
                      return new Tuple<SDColor, SDColor>(result1, result2);
                  }
              }
          
          }
          

          【讨论】:

            【解决方案8】:

            这是最简单的方法,没有助手,没有转换器,没有奇怪的媒体引用。仅 1 行:

            System.Drawing.Brush _Brush = new SolidBrush(System.Drawing.Color.FromArgb(this.ForeColor.R, this.ForeColor.G, this.ForeColor.B));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-27
              • 2011-03-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多