Files
aistudio-wpf-diagram/AIStudio.Wpf.DiagramDesigner/ViewModels/AdditionViewModel/ColorViewModel.cs

497 lines
13 KiB
C#
Raw Normal View History

2021-07-23 09:42:22 +08:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
2022-10-28 22:45:39 +08:00
namespace AIStudio.Wpf.DiagramDesigner
2021-07-23 09:42:22 +08:00
{
[Serializable]
public class ColorViewModel : BindableBase, IColorViewModel
{
#region 使
public static Color[] FillColors { get; } = new Color[] { Colors.Red, Colors.Green, Colors.Blue, Colors.White, Colors.Black, Colors.Purple };
public static Color[] LineColors { get; } = new Color[] { Colors.Red, Colors.Green, Colors.Blue, Colors.White, Colors.Black, Colors.Purple };
#endregion
public ColorViewModel()
{
LineColor = new ColorObject() { Color = Colors.Gray };
2023-01-22 21:46:59 +08:00
FillColor = new ColorObject() { Color = Colors.White };
2021-07-23 09:42:22 +08:00
}
private IColorObject _lineColor;
public IColorObject LineColor
{
get
{
return _lineColor;
}
set
{
if (_lineColor != value)
{
if (_lineColor != null && _lineColor is ColorObject _lineColor1)
{
_lineColor1.PropertyChanged -= ColorViewModel_PropertyChanged;
}
SetProperty(ref _lineColor, value);
if (_lineColor != null && _lineColor is ColorObject _lineColor2)
{
_lineColor2.PropertyChanged += ColorViewModel_PropertyChanged;
}
}
else
{
RaisePropertyChanged(nameof(LineColor));
}
}
}
private IColorObject _fillcolor;
public IColorObject FillColor
{
get
{
return _fillcolor;
}
set
{
if (_fillcolor != value)
{
if (_fillcolor != null && _fillcolor is ColorObject colorObject1)
{
colorObject1.PropertyChanged -= ColorViewModel_PropertyChanged;
}
SetProperty(ref _fillcolor, value);
if (_fillcolor != null && _fillcolor is ColorObject colorObject2)
{
colorObject2.PropertyChanged += ColorViewModel_PropertyChanged;
}
}
else
{
RaisePropertyChanged(nameof(FillColor));
}
}
}
private void ColorViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if (sender == LineColor)
{
RaisePropertyChanged(nameof(LineColor));
}
else if (sender == FillColor)
{
RaisePropertyChanged(nameof(FillColor));
}
2023-04-08 23:38:01 +08:00
RaisePropertyChanged(sender, e);
2021-07-23 09:42:22 +08:00
}
private Color _shadowColor = Colors.Transparent;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public Color ShadowColor
{
get
{
return _shadowColor;
}
set
{
if (!SetProperty(ref _shadowColor, value))
{
RaisePropertyChanged(nameof(ShadowColor));
}
}
}
2023-01-08 09:22:37 +08:00
private double _lineWidth = 1d;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public double LineWidth
{
get
{
return _lineWidth;
}
set
{
if (!SetProperty(ref _lineWidth, value))
{
RaisePropertyChanged(nameof(LineWidth));
}
}
}
2021-07-23 09:42:22 +08:00
private LineDashStyle _lineDashStyle = LineDashStyle.None;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public LineDashStyle LineDashStyle
{
get
{
return _lineDashStyle;
}
set
{
if (!SetProperty(ref _lineDashStyle, value))
{
RaisePropertyChanged(nameof(LineDashStyle));
}
}
}
2023-01-27 14:54:03 +08:00
private LineAnimation _lineAnimation = LineAnimation.None;
2023-04-08 23:38:01 +08:00
[CanDo]
2023-01-27 14:54:03 +08:00
public LineAnimation LineAnimation
{
get
{
return _lineAnimation;
}
set
{
SetProperty(ref _lineAnimation, value);
}
}
2023-02-04 16:38:56 +08:00
private double _lineAnimationDuration = 1;
2023-04-08 23:38:01 +08:00
[CanDo]
2023-02-04 16:38:56 +08:00
public double LineAnimationDuration
{
get
{
return _lineAnimationDuration;
}
set
{
SetProperty(ref _lineAnimationDuration, value);
}
}
2021-07-23 09:42:22 +08:00
}
[Serializable]
public class ColorObject : BindableBase, IColorObject
{
public ColorObject()
{
}
private void GradientStop_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (var old in e.OldItems.OfType<GradientStop>())
{
old.PropertyChanged -= GradientStop_PropertyChanged;
}
}
if (e.NewItems != null)
{
foreach (var old in e.NewItems.OfType<GradientStop>())
{
old.PropertyChanged += GradientStop_PropertyChanged;
}
}
}
private void GradientStop_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
RaisePropertyChanged(nameof(GradientStop));
}
public void BrushTypeChanged()
{
if (BrushType == BrushType.LinearGradientBrush || BrushType == BrushType.RadialGradientBrush)
{
if (GradientStop == null)
{
GradientStop = new ObservableCollection<GradientStop>();
GradientStop.Add(new GradientStop(Color, 0));
GradientStop.Add(new GradientStop(Colors.Gray, 1));
SelectedGradientStop = GradientStop.FirstOrDefault();
RaisePropertyChanged(nameof(GradientStop));
}
}
}
private BrushType _brushType = BrushType.SolidColorBrush;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public BrushType BrushType
{
get
{
return _brushType;
}
set
{
if (SetProperty(ref _brushType, value))
{
BrushTypeChanged();
}
}
}
private Color _color = new Color();
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public Color Color
{
get
{
return _color;
}
set
{
SetProperty(ref _color, value);
}
}
private ObservableCollection<GradientStop> _gradientStop;
public ObservableCollection<GradientStop> GradientStop
{
get
{
return _gradientStop;
}
set
{
if (_gradientStop != value)
{
if (_gradientStop != null)
{
_gradientStop.CollectionChanged -= GradientStop_CollectionChanged;
}
SetProperty(ref _gradientStop, value);
if (_gradientStop != null)
{
_gradientStop.CollectionChanged += GradientStop_CollectionChanged;
}
}
}
}
private GradientStop _selectedGradientStop;
public GradientStop SelectedGradientStop
{
get
{
return _selectedGradientStop;
}
set
{
SetProperty(ref _selectedGradientStop, value);
}
}
2023-04-08 23:38:01 +08:00
2021-07-23 09:42:22 +08:00
private Point _startPoint;
public Point StartPoint
{
get
{
return _startPoint;
}
set
{
SetProperty(ref _startPoint, value);
}
}
private Point _endPoint;
public Point EndPoint
{
get
{
return _endPoint;
}
set
{
SetProperty(ref _endPoint, value);
}
}
private double _opacity = 1;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public double Opacity
{
get
{
return _opacity;
}
set
{
SetProperty(ref _opacity, value);
}
}
private double _light;
public double Light
{
get
{
return _light;
}
set
{
SetProperty(ref _light, value);
}
}
private string _image;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public string Image
{
get
{
return _image;
}
set
{
SetProperty(ref _image, value);
}
}
private LinearOrientation _linearOrientation;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public LinearOrientation LinearOrientation
{
get
{
return _linearOrientation;
}
set
{
SetProperty(ref _linearOrientation, value);
}
}
private RadialOrientation _radialOrientation;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public RadialOrientation RadialOrientation
{
get
{
return _radialOrientation;
}
set
{
SetProperty(ref _radialOrientation, value);
}
}
private int _angle;
2023-04-08 23:38:01 +08:00
[CanDo]
2021-07-23 09:42:22 +08:00
public int Angle
{
get
{
return _angle;
}
set
{
SetProperty(ref _angle, value);
}
}
private int _subType;
public int SubType
{
get
{
return _subType;
}
set
{
SetProperty(ref _subType, value);
}
}
public ICommand AddGradientStopCommand
{
get
{
return new SimpleCommand(para =>
{
var offset = GradientStop.Skip(GradientStop.Count - 2).Select(p => p.Offset).Average();
GradientStop.Add(new GradientStop(Colors.Gray, offset));
});
}
}
public ICommand DeleteGradientStopCommand
{
get
{
return new SimpleCommand(para =>
{
if (SelectedGradientStop != null && GradientStop != null && GradientStop.Count > 2)
{
GradientStop.Remove(SelectedGradientStop);
}
});
}
}
}
public interface IColorObject
{
BrushType BrushType { get; set; }
Color Color { get; set; }
ObservableCollection<GradientStop> GradientStop { get; set; }
Point StartPoint { get; set; }
Point EndPoint { get; set; }
double Opacity { get; set; }
LinearOrientation LinearOrientation { get; set; }
RadialOrientation RadialOrientation { get; set; }
int Angle { get; set; }
string Image { get; set; }
int SubType { get; set; }
}
public class GradientStop : BindableBase
{
public GradientStop()
{
}
public GradientStop(Color color, double offset)
{
Color = color;
Offset = offset;
}
private Color _color = new Color();
public Color Color
{
get
{
return _color;
}
set
{
SetProperty(ref _color, value);
}
}
private double _offset;
public double Offset
{
get
{
return _offset;
}
set
{
SetProperty(ref _offset, value);
}
}
}
}