WPF 仪表盘

根据网上的资源更新一个仪表盘。

去除依赖Arc,根据ArcSegment画圆弧。不多说,上效果。

还有些地方没有完善,有需要的小伙伴自行下载完善。

地址:DashboardDemo 

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);

   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值