//File:Window.xaml.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Collections.Generic; using System.Reflection; namespace ColorConverter { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void colorBlock_MouseDown(object sender, MouseButtonEventArgs e) { Random rnd = new Random((int)DateTime.Now.Ticks); Color newColor = Color.FromRgb((byte)rnd.Next(255), (byte)rnd.Next(255), (byte)rnd.Next(255)); colorBlock.Background = new SolidColorBrush(newColor); } } class ColorMultiConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool inverse = (parameter != null) && (string.Compare(parameter.ToString(), "inverse", true) == 0); byte R = System.Convert.ToByte((double)values[0]); byte G = System.Convert.ToByte((double)values[1]); byte B = System.Convert.ToByte((double)values[2]); Color newColor; if (inverse) newColor = Color.FromRgb((byte)(255 - R), (byte)(255 - G), (byte)(255 - B)); else newColor = Color.FromRgb(R, G, B); return newColor; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { Color oldColor = (Color)value; double R = (double)oldColor.R; double G = (double)oldColor.G; double B = (double)oldColor.B; return new object[] { R, G, B }; } } class ColorNameValueConverter : IValueConverter { private Dictionary namedColors = new Dictionary(); public ColorNameValueConverter() { PropertyInfo[] colorProperties = typeof(Colors).GetProperties(BindingFlags.Static | BindingFlags.Public); Color stepColor; foreach (PropertyInfo pi in colorProperties) { if (pi.PropertyType == typeof(Color)) { stepColor = (Color)pi.GetValue(null, null); namedColors[stepColor] = pi.Name; } } } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Color col = (Color)value; if(namedColors.ContainsKey(col)) return namedColors[col]; return DependencyProperty.UnsetValue; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }