private void CheckBoxIncrement_CheckedChanged(object sender, RoutedEventArgs e)
        {
            if (CheckBoxIncrement.IsChecked == true)
            {
                SliderA1.IsSnapToTickEnabled = true;
                SliderA2.IsSnapToTickEnabled = true;
                SliderB1.IsSnapToTickEnabled = true;
                SliderB2.IsSnapToTickEnabled = true;
                SliderC1.IsSnapToTickEnabled = true;
                SliderC2.IsSnapToTickEnabled = true;
                SliderD1.IsSnapToTickEnabled = true;
                SliderD2.IsSnapToTickEnabled = true;
                SliderA1.SnapToNearestTick();
                SliderA2.SnapToNearestTick();
                SliderB1.SnapToNearestTick();
                SliderB2.SnapToNearestTick();
                SliderC1.SnapToNearestTick();
                SliderC2.SnapToNearestTick();
                SliderD1.SnapToNearestTick();
                SliderD2.SnapToNearestTick();
            }
            else if (CheckBoxIncrement.IsChecked == false)
            {
                SliderA1.IsSnapToTickEnabled = false;
                SliderA2.IsSnapToTickEnabled = false;
                SliderB1.IsSnapToTickEnabled = false;
                SliderB2.IsSnapToTickEnabled = false;
                SliderC1.IsSnapToTickEnabled = false;
                SliderC2.IsSnapToTickEnabled = false;
                SliderD1.IsSnapToTickEnabled = false;
                SliderD2.IsSnapToTickEnabled = false;
            }

            e.Handled = true;
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            // Initialize controls
            CheckBoxRandom.IsChecked = false;
            ComboBoxColorSpace.Items.Add(Cmy.FriendlyName);
            ComboBoxColorSpace.Items.Add(Cmyk.FriendlyName);
            ComboBoxColorSpace.Items.Add(Hsl.FriendlyName);
            ComboBoxColorSpace.Items.Add(Hsv.FriendlyName);
            ComboBoxColorSpace.Items.Add(HunterLab.FriendlyName);
            ComboBoxColorSpace.Items.Add(Lab.FriendlyName);
            ComboBoxColorSpace.Items.Add(Lch.FriendlyName);
            ComboBoxColorSpace.Items.Add(Luv.FriendlyName);
            ComboBoxColorSpace.Items.Add(Rgb.FriendlyName);
            ComboBoxColorSpace.Items.Add(Rgba.FriendlyName);
            ComboBoxColorSpace.Items.Add(Xyz.FriendlyName);
            ComboBoxColorSpace.Items.Add(Yxy.FriendlyName);
            ComboBoxColorSpace.SelectedValue = Rgba.FriendlyName;
            ListBoxColorSet.ItemsSource      = Colors;

            // Configure bindings (enable / disable)
            var binding =
                new Binding("SelectedItems.Count")
            {
                Source = ListBoxColorSet, Converter = new PositiveIntegerToBoolConverter()
            };

            ButtonRemove.SetBinding(IsEnabledProperty, binding);

            // Configure bindings (Random = true)
            binding = new Binding("IsChecked")
            {
                Source = CheckBoxRandom, Converter = new BooleanToVisibilityConverter()
            };
            TextBlockLabelA2.SetBinding(VisibilityProperty, binding);
            TextBlockLabelAMin.SetBinding(VisibilityProperty, binding);
            TextBlockLabelAMax.SetBinding(VisibilityProperty, binding);
            TextBoxValueA2.SetBinding(VisibilityProperty, binding);
            SliderA2.SetBinding(VisibilityProperty, binding);
            TextBlockLabelB2.SetBinding(VisibilityProperty, binding);
            TextBlockLabelBMin.SetBinding(VisibilityProperty, binding);
            TextBlockLabelBMax.SetBinding(VisibilityProperty, binding);
            TextBoxValueB2.SetBinding(VisibilityProperty, binding);
            SliderB2.SetBinding(VisibilityProperty, binding);
            TextBlockLabelC2.SetBinding(VisibilityProperty, binding);
            TextBlockLabelCMin.SetBinding(VisibilityProperty, binding);
            TextBlockLabelCMax.SetBinding(VisibilityProperty, binding);
            TextBoxValueC2.SetBinding(VisibilityProperty, binding);
            SliderC2.SetBinding(VisibilityProperty, binding);
            CheckBoxIncrement.SetBinding(VisibilityProperty, binding);
            ButtonRandomize.SetBinding(VisibilityProperty, binding);

            // Configure bindings (ColorSpace = CMYK)
            binding = new Binding("SelectedValue")
            {
                Source    = ComboBoxColorSpace,
                Converter = new ColorSpaceToVisibilityConverter()
            };
            TextBlockLabelD1.SetBinding(VisibilityProperty, binding);
            TextBoxValueD1.SetBinding(VisibilityProperty, binding);
            SliderD1.SetBinding(VisibilityProperty, binding);

            // Configure bindings (Random = true && ColorSpace = CMYK)
            var bindings = new[]
            {
                new Binding("SelectedValue")
                {
                    Source = ComboBoxColorSpace
                }, new Binding("IsChecked")
                {
                    Source = CheckBoxRandom
                }
            };
            var multiBinding = new MultiBinding()
            {
                Converter = new ColorSpaceToVisibilityMultiConverter()
            };

            foreach (var bindingPart in bindings)
            {
                multiBinding.Bindings.Add(bindingPart);
            }

            TextBlockLabelD2.SetBinding(VisibilityProperty, multiBinding);
            TextBlockLabelDMin.SetBinding(VisibilityProperty, multiBinding);
            TextBlockLabelDMax.SetBinding(VisibilityProperty, multiBinding);
            TextBoxValueD2.SetBinding(VisibilityProperty, multiBinding);
            SliderD2.SetBinding(VisibilityProperty, multiBinding);

            // Configure bindings (Current color rectangles)
            _currentColor1Binding =
                new Binding("CurrentColor1")
            {
                Source = this, Converter = new ColorSpaceToSolidColorBrushConverter()
            };
            RectangleCurrentColor1.SetBinding(Shape.FillProperty, _currentColor1Binding);

            _currentColor2Binding =
                new Binding("CurrentColor2")
            {
                Source = this, Converter = new ColorSpaceToSolidColorBrushConverter()
            };
            RectangleCurrentColor2.SetBinding(Shape.FillProperty, _currentColor2Binding);

            _randomColorBinding =
                new Binding("RandomColor")
            {
                Source = this, Converter = new ColorSpaceToSolidColorBrushConverter()
            };
            RectangleRandomColor1.SetBinding(Shape.FillProperty, _currentColor1Binding);
            RectangleRandomColor2.SetBinding(Shape.FillProperty, _currentColor2Binding);
        }