Converting Hex to Color in C# for Universal Windows Platform (UWP)

If you have developed apps for Universal Windows Platform there must be situations where you had to convert Hex-code to Color. You must have googled to find the solution , or performed a search in Stack-overflow

The most common solution you find will be some thing like the code below which can be found in the following thread in StackOverflow

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");  

Or

Something from the following thread from StackOverflow

string hex = "#FFFFFF";  
Color color = System.Drawing.ColorTranslator.FromHtml(hex);  
Above Code Doesn't work for UWP

Well in most .net Applications the code above will work , but not in UWP Apps or previous Windows Apps. You may hit dependency error like 'System.drawing namespace not found' or 'ColorConverter does not exist'.

The issue here isn't the framework version but rather the reduced framework API that is available to Universal Apps. Windows Universal apps don't have the same coverage of namespaces, classes, and APIs as the full .NET framework, and as a result, you can't reuse everything from full .net (such as System.Drawing) in a Universal Project.

However, you don't necessarily have to rewrite the WHOLE THING. instead, what you want to do is abstract the platform-specific behavior to an interface, and only that part has to be rewritten.

In otherwords, the global behaviors, UI and interaction can be reused using the classes available in all frameworks, usually represented by a Portable Class Library (PCL), and each version of your app (Winforms, Universal, Xamarin, etc) would reuse that shared library for the "core" of the application and the UI (and platform-specific behavior) would be the only part you would implement separately, in each version of the app you want to support.

Is there any other way ?

If the above explanation got you confused and you just want to convert the hex to Color and don't want to be bothered or to get deep into it just use following method :

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;  

Now you have got the color for the hex you have provided.