WPF实现统计图(饼图仿LiveCharts)
阅读原文时间:2021年09月30日阅读:1

WPF开发者QQ群: 340500857  | 微信群 -> 进入公众号主页 加入组织

每日一笑

    下班和实习生一起回家,公交站等车,一乞丐把碗推向实习生乞讨。这时,实习生不慌不忙的说了句:“我不要你的钱,你这钱来的也不容易。”

前言

有小伙伴需要统计图。

欢迎转发、分享、点赞,谢谢大家~。

效果预览(更多效果请下载源码体验)

一、PieControl.cs 代码如下

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using WpfPieControl.Models;

namespace WpfPieControl
{
public class PieControl: Control
{
public ObservableCollection PieSegmentModels
{
get { return (ObservableCollection)GetValue(PieSegmentModelsProperty); }
set { SetValue(PieSegmentModelsProperty, value); }
}

    public static readonly DependencyProperty PieSegmentModelsProperty =  
        DependencyProperty.Register("PieSegmentModels", typeof(ObservableCollection<PieSegmentModel>), typeof(PieControl), new UIPropertyMetadata(OnPieSegmentModelChanged));

    private static void OnPieSegmentModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)  
    {  
        PieControl pieControl = d as PieControl;  
        if (e.NewValue != null)  
        {  
            var array = e.NewValue as ObservableCollection<PieSegmentModel>;  
            double angleNum = 0;  
            foreach (var item in array)  
            {  
                var color = new SolidColorBrush((Color)ColorConverter.ConvertFromString(pieControl.ColorArray\[array.IndexOf(item)\]));  
                item.Color = color;  
                item.StartAngle = angleNum;  
                item.EndAngle = angleNum + item.Value / 100 \* 360;  
                angleNum = item.EndAngle;  
            }  
        }  
    }  
    /// <summary>  
    /// colors  
    /// </summary>  
    private string\[\] ColorArray = new string\[\] { "#FDC006", "#607E89", "#2095F2", "#F34336" };

    /// <summary>  
    /// 0~1  
    /// </summary>  
    public double ArcThickness  
    {  
        get { return (double)GetValue(ArcThicknessProperty); }  
        set { SetValue(ArcThicknessProperty, value); }  
    }

    public static readonly DependencyProperty ArcThicknessProperty =  
        DependencyProperty.Register("ArcThickness", typeof(double), typeof(PieControl), new PropertyMetadata(1.0));

    static PieControl()  
    {  
        DefaultStyleKeyProperty.OverrideMetadata(typeof(PieControl), new FrameworkPropertyMetadata(typeof(PieControl)));  
    }  
}  

}

二、App.xaml 代码如下

三、MainWindow.xaml 代码如下

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章