Edv*_*vin 7 c# windows-runtime
我正在开发一款Windows手机游戏,当我想将HEX字符串转换为Color时,我遇到了困难.在Windows Phone 8 Silverlight上它不是问题,但我在运行时找不到解决方案,因为它不包括Color.FromArgb或Color.FromName函数.
有人有一个将字符串HEX转换为Color的函数吗?
谢谢.
Rob*_*SFT 18
Color.FromArgb位于Windows.UI命名空间中.没有Color.FromName方法,但您可以使用Colors.<name>属性,也可以使用反射从字符串中查找名称.
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);
Run Code Online (Sandbox Code Playgroud)
以防万一有人正在寻找更好的选择.在通用Windows平台(Windows 10)中,有XamlBindingHelper.ConvertValue
比没有好的东西.
// Get a Color instance representing #FFFF0000.
var color = XamlBindingHelper.ConvertValue(typeof(Windows.UI.Color), "red");
Run Code Online (Sandbox Code Playgroud)
它可以转换来自Windows.UI.Xaml命名空间,布尔值,画笔,颜色以及XAML解析器能够做的其他简单内容的枚举.
创建一个将十六进制字符串转换为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;
}
Run Code Online (Sandbox Code Playgroud)
现在剩下的就是通过调用方法获取颜色并将十六进制字符串作为参数传递给它:
var color = GetSolidColorBrush("#FFCD3927").Color;
Run Code Online (Sandbox Code Playgroud)
参考:http: //www.joeljoseph.net/converting-hex-to-color-in-universal-windows-platform-uwp/