ColorPicker
ColorPicker copied to clipboard
Customizable Color Picker control for WPF and AvaloniaUI
About
A collection of various WPF controls used to select colors. Supports .NET Framework 4.5.1+, .NET Core 3.1+, .NET 5 and .NET 6. Originally developed for PixiEditor.
- Included Controls
- Example Usage
- Properties
- Styling
- Other
Included Controls
-
SquarePicker
: A HSV/HSL Color Picker, consists of a circular hue slider and HV/HL square. -
ColorSliders
: A set of HSV/RGB + Alpha sliders -
HexColorTextBox
: An RGBA Hex text field -
ColorDisplay
: A Primary/Secondary Color display with a swap button -
StandardColorPicker
: Combines everything listed above in one control -
PortableColorPicker
: A collapsible version of StandardColorPicker -
AlphaSlider
: A separate alpha slider control
Example Usage
See ColorPickerDemo for an example project.
Basic usage:
Install the NuGet package, insert a reference to the ColorPicker namespace
<Window ...
xmlns:colorpicker="clr-namespace:ColorPicker;assembly=ColorPicker"
...>
Add the controls
<colorpicker:StandardColorPicker x:Name="main" Width="200" Height="380"/>
<colorpicker:PortableColorPicker ColorState="{Binding ElementName=main, Path=ColorState, Mode=TwoWay}" Width="40" Height="40"/>
Note: in some configurations such as using the package in .NET Framework 4.7 the XAML designer tends to break and not show the control.
Properties
All controls share these properties:
-
SelectedColor
dependency property stores the current color as System.Windows.Media.Color -
ColorChanged
: An event that fires on SelectedColor change. -
ColorState
dependency property contains all info about the current state of the control. Use this property to bind controls together. -
Color
property contains nested properties you may bind to or use to retrieve the color in code-behind:-
Color.A
: Current Alpha, a double ranging from 0 to 255 -
Color.RGB_R
,Color.RGB_G
,Color.RGB_B
: Dimensions of the RGB color space, each is a 0-255 double -
Color.HSV_H
: Hue in the HSV color space, a 0-360 double -
Color.HSV_S
: Saturation in the HSV color space, a 0-100 double -
Color.HSV_V
: Value in the HSV color space, a 0-100 double -
Color.HSL_H
: Hue in the HSL color space, a 0-360 double -
Color.HSL_S
: Saturation in the HSL color space, a 0-100 double -
Color.HSL_L
: Lightness in the HSL color space, a 0-100 double
-
Apart from those, some controls have unique properties:
-
SecondColorState
,SecondColor
, andSecondaryColor
are functionally identical toColorState
,Color
, andSelectedColor
respectively. These are present on controls that have a secondary color. -
HintColorState
,HintNotifyableColor
, andHintColor
are functionally identical toColorState
,Color
, andSelectedColor
respectively. These are present on controls that have a hint color. The hint color is a color field that can be used to obtain the primary color from an external source when the user clicks a button. -
UseHintColor
enables the hint color or disables it (disabled by default). -
SmallChange
lets you changeSmallChange
of sliders, which is used as sensitivity for when the user turns the scroll wheel with the cursor over the sliders. Present on controls with sliders. -
ShowAlpha
lets you hide the alpha channel on various controls. Present on all controls containing either an alpha slider (apart from theAlphaSlider
control itself) or a hex color textbox. -
PickerType
: HSV or HSL, present onSquarePicker
or controls that containSquarePicker
.
Styling
Out of the box, the color picker uses the default WPF look:
You may use the included PixiEditor's dark theme by loading a resource dictionary in XAML:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/ColorPicker;component/Styles/DefaultColorPickerStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
and referencing DefaultColorPickerStyle in the style attribute of a control:
<colorpicker:StandardColorPicker Style="{StaticResource DefaultColorPickerStyle}" />
As an alternative, the same can be achieved programmatically:
var resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new System.Uri(
"pack://application:,,,/ColorPicker;component/Styles/DefaultColorPickerStyle.xaml",
System.UriKind.RelativeOrAbsolute);
StandardColorPicker picker = new StandardColorPicker()
{
Style = (Style)resourceDictionary["DefaultColorPickerStyle"]
};
You may define your own styles, see DefaultColorPickerStyle for reference.
Other
Read flabbet's article on the theory behind the first version of this project on dev.to