日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF实现统计图(饼图仿LiveCharts)

發(fā)布時間:2023/12/4 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF实现统计图(饼图仿LiveCharts) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?WPF開發(fā)者QQ群:?340500857? | 微信群 -> 進入公眾號主頁?加入組織

歡迎轉(zhuǎn)發(fā)、分享、點贊、在看,謝謝~。??

01

效果預(yù)覽

效果預(yù)覽(更多效果請下載源碼體驗):


一、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<PieSegmentModel> PieSegmentModels{get { return (ObservableCollection<PieSegmentModel>)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?代碼如下

<Style TargetType="{x:Type local:PieControl}"><Setter Property="UseLayoutRounding" Value="True" /><!--<Setter Property="Background" Value="#252525"/>--><Setter Property="Foreground" Value="White"/><Setter Property="Width" Value="250"/><Setter Property="Height" Value="250"/><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:PieControl}"><ItemsControl Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" ItemsSource="{TemplateBinding PieSegmentModels}"Background="{TemplateBinding Background}"><ItemsControl.ItemsPanel><ItemsPanelTemplate><Grid IsItemsHost="True"/></ItemsPanelTemplate></ItemsControl.ItemsPanel><ItemsControl.ItemTemplate><DataTemplate><ed:Arc Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"ArcThickness="{Binding ArcThickness,RelativeSource={RelativeSource FindAncestor,AncestorType=local:PieControl}}" ArcThicknessUnit="Percent"EndAngle="{Binding EndAngle}"StartAngle="{Binding StartAngle}"Stretch="None"ToolTip="{Binding Name}"Stroke="{Binding ColorStroke}"StrokeThickness="2"Fill="{Binding Color}"></ed:Arc></DataTemplate></ItemsControl.ItemTemplate></ItemsControl></ControlTemplate></Setter.Value></Setter> </Style>

三、MainWindow.xaml 代碼如下

<Window x:Class="WpfPieControl.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfPieControl"mc:Ignorable="d"Title="微信公眾號:WPF開發(fā)者" Height="450" Width="800"><StackPanel><WrapPanel Margin="10"><local:PieControl PieSegmentModels="{Binding PieSegmentModels,RelativeSource={RelativeSource AncestorType=local:MainWindow}}" ArcThickness="1"/><local:PieControl PieSegmentModels="{Binding PieSegmentModels,RelativeSource={RelativeSource AncestorType=local:MainWindow}}" Margin="4,0"ArcThickness="{Binding ElementName=PRAT_Slider,Path=Value}"/><local:PieControl PieSegmentModels="{Binding PieSegmentModels,RelativeSource={RelativeSource AncestorType=local:MainWindow}}" ArcThickness="0.65"/></WrapPanel><Slider Maximum="0.9" Minimum="0.1" x:Name="PRAT_Slider" Margin="10" Width="200"/><Button Content="更新" Click="Button_Click" VerticalAlignment="Bottom" Width="200"/></StackPanel> </Window>

四、MainWindow.xaml.cs 代碼如下

using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using WpfPieControl.Models;namespace WpfPieControl {/// <summary>/// MainWindow.xaml 的交互邏輯/// </summary>public partial class MainWindow : Window{public ObservableCollection<PieSegmentModel> PieSegmentModels{get { return (ObservableCollection<PieSegmentModel>)GetValue(PieSegmentModelsProperty); }set { SetValue(PieSegmentModelsProperty, value); }}public static readonly DependencyProperty PieSegmentModelsProperty =DependencyProperty.Register("PieSegmentModels", typeof(ObservableCollection<PieSegmentModel>), typeof(MainWindow), new PropertyMetadata(null));List<ObservableCollection<PieSegmentModel>> collectionList = new List<ObservableCollection<PieSegmentModel>>();public MainWindow(){InitializeComponent();PieSegmentModels = new ObservableCollection<PieSegmentModel>();var collection1 = new ObservableCollection<PieSegmentModel>();collection1.Add(new PieSegmentModel { Name = "一", Value = 10 });collection1.Add(new PieSegmentModel { Name = "二", Value = 20 });collection1.Add(new PieSegmentModel { Name = "三", Value = 25 });collection1.Add(new PieSegmentModel { Name = "四", Value = 45 });var collection2 = new ObservableCollection<PieSegmentModel>();collection2.Add(new PieSegmentModel { Name = "一", Value = 30 });collection2.Add(new PieSegmentModel { Name = "二", Value = 15 });collection2.Add(new PieSegmentModel { Name = "三", Value = 10 });collection2.Add(new PieSegmentModel { Name = "四", Value = 55 });collectionList.AddRange(new[] { collection1, collection2 });PieSegmentModels = collectionList[0];}bool isRefresh = false;private void Button_Click(object sender, RoutedEventArgs e){if (!isRefresh)PieSegmentModels = collectionList[1];elsePieSegmentModels = collectionList[0];isRefresh = !isRefresh;}} }

源碼地址

github:https://github.com/yanjinhuagood/WPFDevelopers.git

gitee:https://gitee.com/yanjinhua/WPFDevelopers.git

WPF開發(fā)者QQ群:?340500857?

blogs:?https://www.cnblogs.com/yanjinhua

Github:https://github.com/yanjinhuagood

出處:https://www.cnblogs.com/yanjinhua

版權(quán):本作品采用「署名-非商業(yè)性使用-相同方式共享 4.0 國際」許可協(xié)議進行許可。

轉(zhuǎn)載請著名作者 出處 https://github.com/yanjinhuagood

總結(jié)

以上是生活随笔為你收集整理的WPF实现统计图(饼图仿LiveCharts)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。