private void SelectedBrush_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "Angle")
            {
                double newAngle = SelectedBrush.Angle;
                double x2       = radius + radius * Math.Cos(newAngle * Math.PI / 180d);
                double y2       = radius - radius * Math.Sin(newAngle * Math.PI / 180d);

                if (stopAngleArrow != null)
                {
                    stopAngleArrow.X2 = x2;
                    stopAngleArrow.Y2 = y2;
                }
            }
            else if (e.PropertyName == "EndColor" && stopColorPanel != null)
            {
                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.EndColor);
            }
            else if (e.PropertyName == "StartColor" && stopColorPanel != null)
            {
                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.StartColor);
            }

            SetPreviewImage();
        }
        private void ArrowDoubleClick(object sender, MouseButtonEventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                NormalColorPickerWindow colorPicker = new NormalColorPickerWindow();

                if (sender is Arrow)
                {
                    colorPicker.ColorPicker.SelectedColor = ((System.Windows.Media.SolidColorBrush)((Arrow)sender).Background).Color;
                }
                else if (sender is System.Windows.Shapes.Rectangle)
                {
                    colorPicker.ColorPicker.SelectedColor = ((System.Windows.Media.SolidColorBrush)((System.Windows.Shapes.Rectangle)sender).Fill).Color;
                }

                if (colorPicker.ShowDialog().GetValueOrDefault())
                {
                    switch (stopType)
                    {
                    case StopType.Start:
                        SelectedBrush.StartColor = DrawingColorToBrushConverter.ConvertBack(colorPicker.SelectedColorBrush);
                        SetStopColor(SelectedBrush.StartColor);
                        break;

                    case StopType.End:
                        SelectedBrush.EndColor = DrawingColorToBrushConverter.ConvertBack(colorPicker.SelectedColorBrush);
                        SetStopColor(SelectedBrush.EndColor);
                        break;
                    }

                    SetPreviewImage();
                }
            }));
        }
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();

            startArrow     = (Arrow)GetTemplateChild("StartArrow");
            endArrow       = (Arrow)GetTemplateChild("EndArrow");
            stopColorPanel = (System.Windows.Shapes.Rectangle)GetTemplateChild("StopColorPanel");
            alphaNumeric   = (Numeric)GetTemplateChild("nA");
            stopAnglePanel = (System.Windows.Shapes.Ellipse)GetTemplateChild("StopAnglePanel");
            stopAngleArrow = (System.Windows.Shapes.Line)GetTemplateChild("StopAngleArrow");
            SelectedBrush.PropertyChanged += new PropertyChangedEventHandler(SelectedBrush_PropertyChanged);

            alphaNumeric.ValueChanged += new RoutedEventHandler(alphaNumeric_ValueChanged);

            stopColorPanel.MouseLeftButtonUp += new MouseButtonEventHandler(ArrowDoubleClick);
            startArrow.MouseDoubleClick      += new MouseButtonEventHandler(ArrowDoubleClick);
            endArrow.MouseDoubleClick        += new MouseButtonEventHandler(ArrowDoubleClick);

            startArrow.MouseLeftButtonUp += new MouseButtonEventHandler(ArrowMouseUp);
            endArrow.MouseLeftButtonUp   += new MouseButtonEventHandler(ArrowMouseUp);

            stopAnglePanel.MouseDown += new MouseButtonEventHandler(Ellipse_MouseDown);
            stopAnglePanel.MouseMove += new MouseEventHandler(Ellipse_MouseMove);

            stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.StartColor);
            alphaNumeric.Value  = SelectedBrush.StartColor.A;
            stopType            = StopType.Start;

            FillAngleArrow();
            //SetPreviewImage();
        }
 private void SetStopColor(Color color)
 {
     if (stopColorPanel != null)
     {
         stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(color);
         alphaNumeric.Value  = color.A;
         OnSelectedBrushChanged();
     }
 }
        //private void ShowColorPickerHandler(object sender, MouseButtonEventArgs e)
        //{
        //    NormalColorPickerWindow window = new NormalColorPickerWindow();
        //    if (window.ShowDialog().GetValueOrDefault())
        //    {
        //        switch (stopType)
        //        {
        //            case StopType.Start:
        //                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.StartColor);
        //                break;
        //            case StopType.End:
        //                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.EndColor);
        //                break;
        //        }

        //        SetPreviewImage();
        //    }
        //}

        private void ArrowMouseUp(object sender, MouseButtonEventArgs e)
        {
            stopType = ((Arrow)sender).Name == "StartArrow" ? StopType.Start : StopType.End;
            switch (stopType)
            {
            case StopType.Start:
                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.StartColor);
                alphaNumeric.Value  = SelectedBrush.StartColor.A;
                break;

            case StopType.End:
                stopColorPanel.Fill = DrawingColorToBrushConverter.Convert(SelectedBrush.EndColor);
                alphaNumeric.Value  = SelectedBrush.EndColor.A;
                break;
            }
        }