C# SCADA
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
6.0 KiB

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Media;
namespace HMIControl
{
public class Dial : ControlBase
{
public static readonly DependencyProperty MaximumProperty = GaugeBase.MaximumProperty.AddOwner(typeof(Dial),
new FrameworkPropertyMetadata(100.0, FrameworkPropertyMetadataOptions.AffectsRender, null, CoerceMaxReading));
public static readonly DependencyProperty MinimumProperty = GaugeBase.MinimumProperty.AddOwner(typeof(Dial),
new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender, null, CoerceMinReading));
public static readonly DependencyProperty OriginProperty = GaugeBase.OriginProperty.AddOwner(typeof(Dial));
public static readonly DependencyProperty MinTicksCountProperty = GaugeBase.MinTicksCountProperty.AddOwner(typeof(Dial),
new FrameworkPropertyMetadata(5, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty TickFrequencyProperty = GaugeBase.TickFrequencyProperty.AddOwner(typeof(Dial),
new FrameworkPropertyMetadata(5.0, FrameworkPropertyMetadataOptions.AffectsRender));
public static readonly DependencyProperty TickStringFormatProperty = GaugeBase.TickStringFormatProperty.AddOwner(typeof(Dial));
public static readonly DependencyProperty TicksProperty = GaugeBase.TicksProperty.AddOwner(typeof(Dial),
new FrameworkPropertyMetadata(new DoubleCollection(), FrameworkPropertyMetadataOptions.AffectsRender));
//public static readonly DependencyProperty RangeColorsProperty = DependencyProperty.Register("RangeColors", typeof(ObservableCollection<GradientStop>), typeof(TickScale),
// new FrameworkPropertyMetadata(new ObservableCollection<GradientStop>(), FrameworkPropertyMetadataOptions.AffectsRender));
private ObservableCollection<GradientStop> rangeColors = new ObservableCollection<GradientStop>();
public override void EndInit()
{
base.EndInit();
GaugeBase templatedParent = base.TemplatedParent as GaugeBase;
if (templatedParent != null)
{
this.BindToTemplatedParent(TicksProperty, GaugeBase.TicksProperty);
this.BindToTemplatedParent(TickFrequencyProperty, GaugeBase.TickFrequencyProperty);
this.BindToTemplatedParent(MinTicksCountProperty, GaugeBase.MinTicksCountProperty);
this.BindToTemplatedParent(MinimumProperty, GaugeBase.MinimumProperty);
this.BindToTemplatedParent(MaximumProperty, GaugeBase.MaximumProperty);
this.BindToTemplatedParent(OriginProperty, GaugeBase.OriginProperty);
this.rangeColors = templatedParent.RangeColors;
}
}
private static object CoerceMinReading(DependencyObject d, object value)
{
Dial tick = (Dial)d;
double minimum = (double)value;
double maximum = tick.Maximum;
double origin = tick.Origin;
if (minimum > maximum)
{
double temp = minimum;
minimum = maximum;
tick.Maximum = temp;
}
if (origin < minimum)
{
tick.Origin = minimum;
}
return minimum;
}
//在CoerceMaxReading加入强制判断赋值
private static object CoerceMaxReading(DependencyObject d, object value)
{
Dial tick = (Dial)d;
double maximum = (double)value;
double minimum = tick.Minimum;
double origin = tick.Origin;
if (minimum > maximum)
{
double temp = minimum;
tick.Minimum = maximum;
maximum = temp;
}
if (origin > maximum)
{
tick.Origin = maximum;
}
return maximum;
}
public double Maximum
{
get
{
return (double)base.GetValue(MaximumProperty);
}
set
{
base.SetValue(MaximumProperty, value);
}
}
public double Minimum
{
get
{
return (double)base.GetValue(MinimumProperty);
}
set
{
base.SetValue(MinimumProperty, value);
}
}
public double Origin
{
get
{
return (double)base.GetValue(OriginProperty);
}
set
{
base.SetValue(OriginProperty, value);
}
}
public int MinTicksCount
{
get
{
return (int)base.GetValue(MinTicksCountProperty);
}
set
{
base.SetValue(MinTicksCountProperty, value);
}
}
public double TickFrequency
{
get
{
return (double)base.GetValue(TickFrequencyProperty);
}
set
{
base.SetValue(TickFrequencyProperty, value);
}
}
public DoubleCollection Ticks
{
get
{
return (DoubleCollection)base.GetValue(TicksProperty);
}
set
{
base.SetValue(TicksProperty, value);
}
}
public ObservableCollection<GradientStop> RangeColors
{
get
{
return rangeColors;
}
set
{
rangeColors = value;
}
}
public string TickStringFormat
{
get
{
return (string)base.GetValue(TickStringFormatProperty);
}
set
{
base.SetValue(TickStringFormatProperty, value);
}
}
}
}