根据网上的资源更新一个仪表盘。
去除依赖Arc,根据ArcSegment画圆弧。不多说,上效果。
还有些地方没有完善,有需要的小伙伴自行下载完善。
Dashboard.cs代码
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace AppWpfControls;
/// <summary>
/// 仪表盘=》Dashboard
/// </summary>
public class Dashboard : Control
{
//public const string ArcName = "arckd";
//public const string ValueTxtName = "valueTxt";
/// <summary>
///
/// </summary>
public const string CanvasName = "canvasPlate";
/// <summary>
///
/// </summary>
public const string ZZRotateName = "rtPointer";
//private static double StartAngle = -135.5;
static Dashboard()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(Dashboard), new FrameworkPropertyMetadata(typeof(Dashboard)));
}
//Arc arckd;
//TextBlock valueTxt;
Canvas canvasPlate;
RotateTransform rtPointer;
/// <summary>
///
/// </summary>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
//arckd ??= GetTemplateChild(ArcName) as Arc;
//valueTxt ??= GetTemplateChild(ValueTxtName) as TextBlock;
canvasPlate ??= GetTemplateChild(CanvasName) as Canvas;
rtPointer ??= GetTemplateChild(ZZRotateName) as RotateTransform;
DrawScale();
DrawAngle();
//arckd.EndAngle = StartAngle + (-StartAngle * 2d) * ((double)Value / Maximum);
//valueTxt.Text = Value.ToString();
}
#region 值、最大值、最小值
/// <summary>
/// 值
/// </summary>
public double Value
{
get { return (double)GetValue(ValueProperty); }
set
{
SetValue(ValueProperty, value);
}
}
/// <summary>
/// 值
/// </summary>
public static readonly DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof(double), typeof(Dashboard),
new PropertyMetadata(default(double), new PropertyChangedCallback(OnValuePropertyChanged)));
/// <summary>
/// 值单位
/// </summary>
public string ValueUnit
{
get { return (string)GetValue(ValueUnitProperty); }
set
{
SetValue(ValueUnitProperty, value);
}
}
/// <summary>
/// 值单位
/// </summary>
public static readonly DependencyProperty ValueUnitProperty =
DependencyProperty.Register("ValueUnit", typeof(string), typeof(Dashboard),
new PropertyMetadata(default(string)));
/// <summary>
/// 最小值
/// </summary>
public double Minimum
{
get { return (double)GetValue(MinimumProperty); }
set { SetValue(MinimumProperty, value); }
}
/// <summary>
/// 最小值
/// </summary>
public static readonly DependencyProperty MinimumProperty =
DependencyProperty.Register("Minimum", typeof(double), typeof(Dashboard),
new PropertyMetadata(double.NaN, new PropertyChangedCallback(OnPropertyChanged)));
/// <summary>
/// 最大值
/// </summary>
public double Maximum
{
get { return (double)GetValue(MaximumProperty); }
set { SetValue(MaximumProperty, value); }
}
/// <summary>
/// 最大值
/// </summary>
public static readonly DependencyProperty MaximumProperty =
DependencyProperty.Register("Maximum", typeof(double), typeof(Dashboard),
new PropertyMetadata(double.NaN, new PropertyChangedCallback(OnPropertyChanged)));
#endregion 值、最大值、最小值
/// <summary>
/// 框背景颜色
/// </summary>
public Brush PlateBackground
{
get { return (Brush)GetValue(PlateBackgroundProperty); }
set { SetValue(PlateBackgroundProperty, value); }
}
/// <summary>
/// 框背景颜色
/// </summary>
public static readonly DependencyProperty PlateBackgroundProperty =
DependencyProperty.Register("PlateBackground", typeof(Brush), typeof(Dashboard), null);