xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ColorConverter"
Title="Colors" Height="300" Width="300">
//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.Windows;
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();
}
}
}