博客
关于我
从头实现一个WPF条形图
阅读量:392 次
发布时间:2019-03-05

本文共 3978 字,大约阅读时间需要 13 分钟。

时间如流水,只能流去不流回!

点赞再看,养成习惯,这是您给我创作的动力!

本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相关的Qt Quick和Qt Widgets等,只分享自己熟悉的、自己会的。

阅读导航:

  • 一、先看效果
  • 二、本文背景
  • 三、代码实现
  • 四、文章参考
  • 五、代码下载

一、先看效果

二、本文背景

有没有这种场景:开源控件库或者收费的控件库,条形图或者柱状图都非常强大,但我的业务就是不符合,就是要自己设计呢?本文通过简单的实现一个条形图功能,以后类似的统计图可以在这上面进行修改,原理是类似的。

三、代码实现

小编使用.Net Core 3.1创建的WPF工程,创建名称为“BarChart”的解决方案后,添加名称为”Bar“的WPF用户控件,这个控件就是上图中的单个柱子,下面是Bar.xaml代码

1 
8
9
10
11
12
13
14
15
16
17

 

Bar.xaml.cs代码,主要是绑定前景色及背景色,及柱子百分比值。

1 using System.ComponentModel; 2 using System.Windows; 3 using System.Windows.Controls; 4 using System.Windows.Media; 5  6 namespace BarChart 7 { 8     ///  9     /// BarChart.xaml 的交互逻辑10     /// 11     public partial class Bar  : UserControl, INotifyPropertyChanged12     {13         public event PropertyChangedEventHandler PropertyChanged;14         private void NotifyPropertyChanged(string info)15         {16             if (PropertyChanged != null)17             {18                 PropertyChanged(this, new PropertyChangedEventArgs(info));19             }20         }21 22         private double _value;23         public double Value24         {25             get { return _value; }26             set27             {28                 _value = value;29                 UpdateBarHeight();30                 NotifyPropertyChanged("Value");31             }32         }33 34         private double maxValue;35         public double MaxValue36         {37             get { return maxValue; }38             set39             {40                 maxValue = value;41                 UpdateBarHeight();42                 NotifyPropertyChanged("MaxValue");43             }44         }45 46         private double barHeight;47         public double BarHeight48         {49             get { return barHeight; }50             set51             {52                 barHeight = value;53                 NotifyPropertyChanged("BarHeight");54             }55         }56 57         private Brush color;58         public Brush Color59         {60             get { return color; }61             set62             {63                 color = value;64                 NotifyPropertyChanged("Color");65             }66         }67 68         private void UpdateBarHeight()69         {70             if (maxValue > 0)71             {72                 var percent = (_value * 100) / maxValue;73                 BarHeight = (percent * this.ActualHeight) / 100;74             }75         }76 77         public Bar()78         {79             InitializeComponent();80 81             this.DataContext = this;82             color = Brushes.Black;83         }84 85 86         private void UserControl_Loaded(object sender, RoutedEventArgs e)87         {88             UpdateBarHeight();89         }90 91         private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)92         {93             UpdateBarHeight();94         }95     }96 }

 

主窗体MainWindow.xaml,添加显示的业务数据,目前只是展示了进度值,其他标签只要你看懂了代码,很好加的,比如每根柱子,上面颜色显示一种意义名称、下面显示另一种意义名称。

1 
10
11
12
13
14
15 16
17
19
20 21
24
25
26
27
28
29
30
31
32
33
34
35
36
37

 

四、文章参考

参考:

 :    

五、代码下载

文章中代码已经全部贴出,小编这里还是建议:能使用开源的控件库还是使用开源控件库吧,自己定义确实有点麻烦。

本文只是给个例子,方便自定义扩展。

 

 

除非注明,文章均由  整理发布,欢迎转载。

转载请注明本文地址:

欢迎扫描下方二维码关注  的微信公众号,本站会及时推送最新技术文章(微信公众号“dotnet9_com”):

 

如有收获,请大力转发,,谢谢大家对dotnet技术的关注和支持 。

本站使用  的 

你可能感兴趣的文章
常量表达式
查看>>
POD类型
查看>>
const与常量,傻傻分不清楚~
查看>>
Head First设计模式——迭代器模式
查看>>
MongoDB版本及存储引擎区别
查看>>
shell echo单行和多行文字定向写入到文件中
查看>>
AtCoder Beginner Contest 100 题解
查看>>
【数据结构】可持久化线段树初步
查看>>
Java高性能编程之CAS与ABA及解决方法
查看>>
从BIO到Netty的演变
查看>>
《算法导论》第二章笔记
查看>>
HTML节点操作
查看>>
HTML5新特性
查看>>
cmp命令
查看>>
一次编辑
查看>>
JavaScript中的链式调用
查看>>
day-04-列表
查看>>
Linux 磁盘管理(df fu fdisk mkfs mount)
查看>>
第一类曲面积分
查看>>
MySQL锁机制
查看>>