2011-04-12 35 views

Respuesta

95

Esto es para Color a Brush ....

no se puede convertir, usted tiene que hacer un nuevo cepillo ....

SolidColorBrush brush = new SolidColorBrush(myColor); 

ahora, si lo necesita en XAML, se puede hacer un convertidor de valor personalizado y el uso que en una unión

+0

Para compatibilidad con versiones anteriores, sería mejor usar 'SolidBrush' (' System.Drawing'), que está disponible desde .NET Framework 1.1, en lugar de 'SolidColorBrush' (' System.Windows.Media'), disponible a partir de .NET Framework 3.0. – mbjoe

30
Brush brush = new SolidColorBrush(color); 

La O a la vuelta:

if (brush is SolidColorBrush) 
{ 
    Color color = (brush as SolidColorBrush).Color; 
} 

O algo así.

Point not not all Los pinceles son de colores pero puede convertir todos los colores en un Pincel (SolidColor).

+0

Color para cepillar! – raiserle

+0

@raiserle: Para su información, el contenido de la pregunta solía ser 'Quiero convertir de Brush a Color en C#' mientras que el título era al revés. –

15
SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(255,255,139,0)) 
9

puede utilizar esta:

new SolidBrush(color) 

donde el color es algo como esto:

Color.Red 

o

Color.FromArgb(36,97,121)) 

o ...

+0

Para compatibilidad con versiones anteriores, esta respuesta es mejor, porque 'SolidBrush' (' System.Drawing') está disponible desde .NET Framework 1.1, mientras que 'SolidColorBrush' (' System.Windows.Media') está disponible a partir de .NET Framework 3.0. – mbjoe

1

Si trabaja con una aplicación que tiene una combinación de Windows Forms y WPF, puede tener la complicación adicional de tratar de convertir un System.Drawing.Color a System.Windows.Media.Color. No estoy seguro de si hay una manera más fácil de hacer esto, pero lo hice de esta manera:

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); 
} 

continuación, puede utilizar una de las técnicas mencionadas anteriormente para convertir a un cepillo.

0

A menudo es suficiente usar el cepillo de hermanos o de los padres para este fin, y eso está fácilmente disponible en wpf al recuperar sus propiedades de primer plano o de fondo.

ref: Control.Background

0

tuve mismo problema antes, aquí es mi clase que resuelven las conversiones de color usarlo y disfrutar:

Aquí U Go, utiliza mi clase Multi color Conversión

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); 
     } 
    } 

} 
Cuestiones relacionadas