Wie konvertiere ich eine Color
in eine Brush
in C #?
Dies ist für Color
bis Brush
....
sie können es nicht umwandeln, Sie müssen einen neuen Pinsel erstellen ....
SolidColorBrush brush = new SolidColorBrush( myColor );
wenn Sie es jetzt in XAML benötigen, KÖNNEN Sie einen benutzerdefinierten Wertkonverter erstellen und diesen in einer Bindung verwenden
Brush brush = new SolidColorBrush(color);
Umgekehrt:
if (brush is SolidColorBrush)
{
Color color = (brush as SolidColorBrush).Color;
}
Oder sowas ähnliches.
Es kann sein, dass nicht alle Pinsel Farben sind, aber Sie können aus allen Farben einen (SolidColor) Pinsel machen.
SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )
sie können dies verwenden:
new SolidBrush(color)
wo Farbe so etwas ist:
Color.Red
oder
Color.FromArgb(36,97,121))
oder ...
Ich hatte das gleiche Problem schon einmal, hier ist meine Klasse, die Farbkonvertierungen gelöst hat.
Hier, gehen Sie, verwenden Sie meine Klasse für die Mehrfarbenkonvertierung
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);
}
}
}
Wenn Sie mit einer Anwendung arbeiten, die eine Mischung aus Windows Forms und WPF enthält, haben Sie möglicherweise die zusätzliche Schwierigkeit, eine System.Drawing.Color in eine System.Windows.Media.Color ..__ Ich bin mir nicht sicher, ob es einen einfacheren Weg gibt, aber ich habe es so gemacht:
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);
}
Dann können Sie eine der zuvor genannten Techniken verwenden, um in einen Pinsel zu konvertieren.
Es reicht oft aus, den Pinsel eines Geschwisters oder eines Elternteils für diesen Zweck zu verwenden. Dies ist in wpf durch Abrufen der Foreground- oder Background-Eigenschaft leicht verfügbar.
ref: Control.Background