博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF手绘进度条
阅读量:6239 次
发布时间:2019-06-22

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

话说现在的项目中我要用进度条了。本想用自带的那个ProcessBar控件,可是样式不好看,加上自己本事有限,对WPF中的样式相当的不熟。只好想别的办法了。不知哪根儿神经一动,我想到了用Rectangle控件。知道这个控件的一定就知道我是怎么想的了。具体通过DispatcherTimer类实现。因为这个类有一个Interval属性设置使用的多长时间完成,再加上一个Tick事件,每一毫秒就会触发一下这个Tick事件。当然大多数情况下我们不会这么频繁的触发这个事件。具体就跟实际情况而定了。关于DispatcherTimer类,还是让MSDN来讲吧,。下面贴出来代码,做一下记录。

xaml代码如下:

当然与此相关的当然就是后台代码啦:

public partial class MainWindow : Window     {
private delegate int BrushProcessHandle(); public MainWindow() {
InitializeComponent(); } Thickness tmpT; private void button1_Click(object sender, RoutedEventArgs e) {
this.rectangle1.Width = 0; i = 1; if (tmpT.Left==0&&tmpT.Top==0&&tmpT.Right==0&&tmpT.Bottom==0) {
tmpT = this.label2.Margin; } else {
this.label2.Margin = tmpT; } this.textBox1.Text = "do working..."; // 注释此句将百分比将会一直在进度条头部显示 this.label2.Margin = new Thickness(this.label2.Margin.Left - 52, this.label2.Margin.Top, this.label2.Margin.Right, this.label2.Margin.Bottom); // 取消注释字体颜色为白色 //this.label2.Foreground = Brushes.White; // 取消注释字体为斜体 //this.label2.FontStyle = FontStyles.Italic; BrushProcessBar(); } private DispatcherTimer dt; private int i = 1; private void BrushProcessBar() {
dt = new DispatcherTimer(); dt.Interval = new TimeSpan(10000); dt.Tick += new EventHandler(dt_Tick); dt.Start(); } protected void dt_Tick(object sender, EventArgs e) {
// 纯色进度条 //SolidColorBrush scb = new SolidColorBrush(); //scb.Color = Color.FromRgb(63, 134, 231); // 渐变进度条 LinearGradientBrush scb = new LinearGradientBrush(Color.FromRgb(63, 169, 233), Color.FromRgb(16, 111, 197), 0); this.rectangle1.Width = i++; this.label2.Margin = new Thickness(this.label2.Margin.Left + 1, this.label2.Margin.Top, this.label2.Margin.Right, this.label2.Margin.Bottom); this.rectangle1.Fill = scb; if (i == 50 || i == 120 || i == 410) {
Thread.Sleep(200); } this.label2.Content = Decimal.Round(((decimal)i)/400*100,2) + "%"; if (i == 400) {
dt.Stop(); this.textBox1.Text += "\r\nCompleted"; } } private void Window_Loaded(object sender, RoutedEventArgs e) {
} }

再给个程序运行效果图吧?好吧。

以上就是源码了。就不再提供下载了。不过在多数应用场景中操作进度条都要垮线程。这里面的知识就不说了。有兴趣再查资料吧。通过这种方法可以自定义一个WPF控件去应用,这样就不用再使用自带的控件了,而且自定义的控件话灵活性也会很大。

转载地址:http://pcdia.baihongyu.com/

你可能感兴趣的文章
StrokePlus
查看>>
joisino's travel
查看>>
组合游戏-博弈论中经典模型题目
查看>>
浅谈HTTP的GET和POST
查看>>
点灯笼
查看>>
try{}catch{}
查看>>
[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton的过程 1/4]
查看>>
Linux VMware新添加网络适配器找不到配置文件问题
查看>>
Javascript百学不厌 - this
查看>>
机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
查看>>
实用算法实现-第 14 篇 启发式搜索
查看>>
c#常用的排序算法
查看>>
论文阅读——Visual inertial odometry using coupled nonlinear optimization
查看>>
Office插件编程[转]
查看>>
读代码还是读文档,来自知乎
查看>>
Linux 常见编译错误
查看>>
ASP.NET MVC 3 Controller
查看>>
Vs中调试MVC源代码步骤
查看>>
JavaScript项目重构到底有多少坑要填要踩
查看>>
footer绝对定位但是不在页面最下边解决方案
查看>>