可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am working on a windows phone game, and I got stuck when I wanted to convert a HEX string into Color. On windows phone 8 silverlight it is not a problem but I cannot find a solution in runtime because it doesn't include Color.FromArgb, or Color.FromName functions.
Does somebody have a function that converts string HEX to Color?
Thanks.
回答1:
Color.FromArgb is in the Windows.UI namespace. There isn't a Color.FromName method, but you can use the Colors.< name > properties or you can use reflection to look up the name from a string.
using System.Reflection; // For GetRuntimeProperty
using System.Globalization; // For NumberStyles
using Windows.UI; // for Color and Colors
using Windows.UI.Xaml.Media; // for SystemColorBrush
// from #AARRGGBB string
byte a = byte.Parse(hexColor.Substring(1, 2),NumberStyles.HexNumber);
byte r = byte.Parse(hexColor.Substring(3, 2),NumberStyles.HexNumber);
byte g = byte.Parse(hexColor.Substring(5, 2),NumberStyles.HexNumber);
byte b = byte.Parse(hexColor.Substring(7, 2),NumberStyles.HexNumber);
Windows.UI.Color color = Color.FromArgb(a, r, g, b);
Windows.UI.Xaml.Media.SolidColorBrush br = new SolidColorBrush(color);
// From Name
var prop = typeof(Windows.UI.Colors).GetRuntimeProperty("Aqua");
if (prop != null)
{
Color c = (Color) prop.GetValue(null);
br = new SolidColorBrush(c);
}
// From Property
br = new SolidColorBrush(Colors.Aqua);
回答2:
Just in case someone is looking for a better alternative. In Universal Windows Platform (Windows 10), there is XamlBindingHelper.ConvertValue
, which is much better than nothing.
// Get a Color instance representing #FFFF0000.
var color = XamlBindingHelper.ConvertValue(typeof(Windows.UI.Color), "red");
It can convert enums from Windows.UI.Xaml namespace, booleans, brushes, colors and other simple stuff XAML parser is able to do.
回答3:
Converting Hex to Color in C# for Universal Windows Platform (UWP)
Create a method to Convert Hex string to SolidColorBrush:
public SolidColorBrush GetSolidColorBrush(string hex)
{
hex = hex.Replace("#", string.Empty);
byte a = (byte)(Convert.ToUInt32(hex.Substring(0, 2), 16));
byte r = (byte)(Convert.ToUInt32(hex.Substring(2, 2), 16));
byte g = (byte)(Convert.ToUInt32(hex.Substring(4, 2), 16));
byte b = (byte)(Convert.ToUInt32(hex.Substring(6, 2), 16));
SolidColorBrush myBrush = new SolidColorBrush(Windows.UI.Color.FromArgb(a, r, g, b));
return myBrush;
}
Now all that left is to get the color by Calling the method and pass the hex string to it as parameter:
var color = GetSolidColorBrush("#FFCD3927").Color;
Reference:
http://www.joeljoseph.net/converting-hex-to-color-in-universal-windows-platform-uwp/
回答4:
I made a method from the top answer here:
private Windows.UI.Color GetColorFromHex(string hexString)
{
hexString = hexString.Replace("#", string.Empty);
byte r = byte.Parse(hexString.Substring(0, 2), NumberStyles.HexNumber);
byte g = byte.Parse(hexString.Substring(2, 2), NumberStyles.HexNumber);
byte b = byte.Parse(hexString.Substring(4, 2), NumberStyles.HexNumber);
return Windows.UI.Color.FromArgb(byte.Parse("1"), r, g, b);
}
回答5:
Here is an easy to use code snippet
public Color HexColor(String hex)
{
//remove the # at the front
hex = hex.Replace("#", "");
byte a = 255;
byte r = 255;
byte g = 255;
byte b = 255;
int start = 0;
//handle ARGB strings (8 characters long)
if (hex.Length == 8)
{
a = byte.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
start = 2;
}
//convert RGB characters to bytes
r = byte.Parse(hex.Substring(start, 2), System.Globalization.NumberStyles.HexNumber);
g = byte.Parse(hex.Substring(start+2, 2), System.Globalization.NumberStyles.HexNumber);
b = byte.Parse(hex.Substring(start+4, 2), System.Globalization.NumberStyles.HexNumber);
return Color.FromArgb(a, r, g, b);
}
and you can simply call like the below one
Color c = HexColor("#99ccff");
I tested this in winphone 8.1 and it works
Reference
回答6:
generete a file namely: ColorUtils.cs
using Windows.UI.Xaml.Markup;
....
static class ColorUtils
{
public static Color GetColorFromHex(string hexString)
{
Color x =(Color)XamlBindingHelper.ConvertValue(typeof(Color), hexString);
return x;
}
}
and use it something like
var acolor=(new SolidColorBrush(ColorUtils.GetColorFromHex("#F24C27")):
or with alpha
var acolor=(new SolidColorBrush(ColorUtils.GetColorFromHex("#4CF24C27")):
回答7:
Final solution, that works as well on UWP:
public static Color GetColorFromHex(string hexString) {
//add default transparency to ignore exception
if ( !string.IsNullOrEmpty(hexString) && hexString.Length > 6 ) {
if ( hexString.Length == 7 ) {
hexString = "FF" + hexString;
}
hexString = hexString.Replace("#", string.Empty);
byte a = (byte) ( Convert.ToUInt32(hexString.Substring(0, 2), 16) );
byte r = (byte) ( Convert.ToUInt32(hexString.Substring(2, 2), 16) );
byte g = (byte) ( Convert.ToUInt32(hexString.Substring(4, 2), 16) );
byte b = (byte) ( Convert.ToUInt32(hexString.Substring(6, 2), 16) );
Color color = Color.FromArgb(a, r, g, b);
return color;
}
//return black if hex is null or invalid
return Color.FromArgb(255, 0, 0, 0);
}
回答8:
You can use
var color = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0, 0));