diff --git a/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.Properties.cs b/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.Properties.cs
index 587a89ee38..00d84f5dd3 100644
--- a/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.Properties.cs
+++ b/src/Avalonia.Controls.ColorPicker/ColorSpectrum/ColorSpectrum.Properties.cs
@@ -97,7 +97,7 @@ namespace Avalonia.Controls.Primitives
/// Gets or sets the currently selected color in the RGB color model.
///
///
- /// For control authors use instead to avoid loss
+ /// For control authors, use instead to avoid loss
/// of precision and color drifting.
///
public Color Color
diff --git a/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.Properties.cs b/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.Properties.cs
new file mode 100644
index 0000000000..aa5dfb5fc4
--- /dev/null
+++ b/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.Properties.cs
@@ -0,0 +1,362 @@
+using System.Collections.ObjectModel;
+using Avalonia.Controls.Primitives;
+using Avalonia.Data;
+using Avalonia.Media;
+
+namespace Avalonia.Controls
+{
+ public partial class ColorView
+ {
+ // SelectedColorModel ActiveColorModel?
+ // SelectedTab
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty ColorProperty =
+ AvaloniaProperty.Register(
+ nameof(Color),
+ Colors.White,
+ defaultBindingMode: BindingMode.TwoWay);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty ColorSpectrumComponentsProperty =
+ AvaloniaProperty.Register(
+ nameof(ColorSpectrumComponents),
+ ColorSpectrumComponents.HueSaturation);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty ColorSpectrumShapeProperty =
+ AvaloniaProperty.Register(
+ nameof(ColorSpectrumShape),
+ ColorSpectrumShape.Box);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly DirectProperty> CustomPaletteColorsProperty =
+ AvaloniaProperty.RegisterDirect>(
+ nameof(CustomPaletteColors),
+ o => o.CustomPaletteColors);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty CustomPaletteColumnCountProperty =
+ AvaloniaProperty.Register(
+ nameof(CustomPaletteColumnCount),
+ 4);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty CustomPaletteProperty =
+ AvaloniaProperty.Register(
+ nameof(CustomPalette),
+ null);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty HsvColorProperty =
+ AvaloniaProperty.Register(
+ nameof(HsvColor),
+ Colors.White.ToHsv(),
+ defaultBindingMode: BindingMode.TwoWay);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsAlphaEnabledProperty =
+ AvaloniaProperty.Register(
+ nameof(IsAlphaEnabled),
+ false);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsAlphaSliderVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsAlphaSliderVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsAlphaTextInputVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsAlphaTextInputVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsColorChannelTextInputVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsColorChannelTextInputVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsColorPaletteVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsColorPaletteVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsColorPreviewVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsColorPreviewVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsColorSliderVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsColorSliderVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsColorSpectrumVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsColorSpectrumVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty IsHexInputVisibleProperty =
+ AvaloniaProperty.Register(
+ nameof(IsHexInputVisible),
+ true);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MaxHueProperty =
+ AvaloniaProperty.Register(
+ nameof(MaxHue),
+ 359);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MaxSaturationProperty =
+ AvaloniaProperty.Register(
+ nameof(MaxSaturation),
+ 100);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MaxValueProperty =
+ AvaloniaProperty.Register(
+ nameof(MaxValue),
+ 100);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MinHueProperty =
+ AvaloniaProperty.Register(
+ nameof(MinHue),
+ 0);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MinSaturationProperty =
+ AvaloniaProperty.Register(
+ nameof(MinSaturation),
+ 0);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty MinValueProperty =
+ AvaloniaProperty.Register(
+ nameof(MinValue),
+ 0);
+
+ ///
+ /// Defines the property.
+ ///
+ public static readonly StyledProperty ShowAccentColorsProperty =
+ AvaloniaProperty.Register(
+ nameof(ShowAccentColors),
+ true);
+
+ ///
+ public Color Color
+ {
+ get => GetValue(ColorProperty);
+ set => SetValue(ColorProperty, value);
+ }
+
+ ///
+ public ColorSpectrumComponents ColorSpectrumComponents
+ {
+ get => GetValue(ColorSpectrumComponentsProperty);
+ set => SetValue(ColorSpectrumComponentsProperty, value);
+ }
+
+ ///
+ public ColorSpectrumShape ColorSpectrumShape
+ {
+ get => GetValue(ColorSpectrumShapeProperty);
+ set => SetValue(ColorSpectrumShapeProperty, value);
+ }
+
+ ///
+ /// Gets the list of custom palette colors.
+ ///
+ public ObservableCollection CustomPaletteColors
+ {
+ get => _customPaletteColors;
+ }
+
+ ///
+ /// Gets or sets the number of colors in each row (section) of the custom color palette.
+ /// Within a standard palette, rows are shades and columns are colors.
+ ///
+ public int CustomPaletteColumnCount
+ {
+ get => GetValue(CustomPaletteColumnCountProperty);
+ set => SetValue(CustomPaletteColumnCountProperty, value);
+ }
+
+ ///
+ /// Gets or sets the custom color palette.
+ /// This will automatically set and
+ /// overwriting any existing values.
+ ///
+ public IColorPalette? CustomPalette
+ {
+ get => GetValue(CustomPaletteProperty);
+ set => SetValue(CustomPaletteProperty, value);
+ }
+
+ ///
+ public HsvColor HsvColor
+ {
+ get => GetValue(HsvColorProperty);
+ set => SetValue(HsvColorProperty, value);
+ }
+
+ public bool IsAlphaEnabled
+ {
+ get => GetValue(IsAlphaEnabledProperty);
+ set => SetValue(IsAlphaEnabledProperty, value);
+ }
+
+ public bool IsAlphaSliderVisible
+ {
+ get => GetValue(IsAlphaSliderVisibleProperty);
+ set => SetValue(IsAlphaSliderVisibleProperty, value);
+ }
+
+ public bool IsAlphaTextInputVisible
+ {
+ get => GetValue(IsAlphaTextInputVisibleProperty);
+ set => SetValue(IsAlphaTextInputVisibleProperty, value);
+ }
+
+ public bool IsColorChannelTextInputVisible // TODO: Component
+ {
+ get => GetValue(IsColorChannelTextInputVisibleProperty);
+ set => SetValue(IsColorChannelTextInputVisibleProperty, value);
+ }
+
+ ///
+ /// Gets or sets a value indicating whether the color palette is visible.
+ ///
+ public bool IsColorPaletteVisible
+ {
+ get => GetValue(IsColorPaletteVisibleProperty);
+ set => SetValue(IsColorPaletteVisibleProperty, value);
+ }
+
+ public bool IsColorPreviewVisible
+ {
+ get => GetValue(IsColorPreviewVisibleProperty);
+ set => SetValue(IsColorPreviewVisibleProperty, value);
+ }
+
+ public bool IsColorSliderVisible
+ {
+ get => GetValue(IsColorSliderVisibleProperty);
+ set => SetValue(IsColorSliderVisibleProperty, value);
+ }
+
+ public bool IsColorSpectrumVisible
+ {
+ get => GetValue(IsColorSpectrumVisibleProperty);
+ set => SetValue(IsColorSpectrumVisibleProperty, value);
+ }
+
+ public bool IsHexInputVisible
+ {
+ get => GetValue(IsHexInputVisibleProperty);
+ set => SetValue(IsHexInputVisibleProperty, value);
+ }
+
+ ///
+ public int MaxHue
+ {
+ get => GetValue(MaxHueProperty);
+ set => SetValue(MaxHueProperty, value);
+ }
+
+ ///
+ public int MaxSaturation
+ {
+ get => GetValue(MaxSaturationProperty);
+ set => SetValue(MaxSaturationProperty, value);
+ }
+
+ ///
+ public int MaxValue
+ {
+ get => GetValue(MaxValueProperty);
+ set => SetValue(MaxValueProperty, value);
+ }
+
+ ///
+ public int MinHue
+ {
+ get => GetValue(MinHueProperty);
+ set => SetValue(MinHueProperty, value);
+ }
+
+ ///
+ public int MinSaturation
+ {
+ get => GetValue(MinSaturationProperty);
+ set => SetValue(MinSaturationProperty, value);
+ }
+
+ ///
+ public int MinValue
+ {
+ get => GetValue(MinValueProperty);
+ set => SetValue(MinValueProperty, value);
+ }
+
+ ///
+ public bool ShowAccentColors
+ {
+ get => GetValue(ShowAccentColorsProperty);
+ set => SetValue(ShowAccentColorsProperty, value);
+ }
+ }
+}
diff --git a/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.cs b/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.cs
new file mode 100644
index 0000000000..3aff4614a5
--- /dev/null
+++ b/src/Avalonia.Controls.ColorPicker/ColorView/ColorView.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Avalonia.Controls.Primitives;
+using Avalonia.Media;
+
+namespace Avalonia.Controls
+{
+ ///
+ /// Presents a color for user editing using a spectrum, palette and component sliders.
+ ///
+ public partial class ColorView : TemplatedControl
+ {
+ private ObservableCollection _customPaletteColors = new ObservableCollection();
+
+
+ }
+}