在DrawingVisual上绘制圆形的进度条,类似于IOS系统风格。

1.说明:在WPF中,文件下载时需要显示下载进度,由于系统自带的条型进度条比较占用空间,改用圆形的进度条,需要在DrawingVisual上呈现。

运行的效果如图:

               private Point GetPointOnCir(Point CenterPoint, double r, double angel){Point p = new Point();p.X = Math.Sin(angel * Math.PI / 180) * r + CenterPoint.X;p.Y = CenterPoint.Y - Math.Cos(angel * Math.PI / 180) * r;return p;}private Geometry drawingArc(Point bigCirclefirstPoint, Point bigCirclesecondPoint, Point smallCirclefirstPoint, Point smallCirclesecondPoint, double bigCircleRadius, double smallCircleRadius,bool  isLargeArc){PathFigure pathFigure = new PathFigure { IsClosed = true };pathFigure.StartPoint = bigCirclefirstPoint;pathFigure.Segments.Add(new ArcSegment{Point = bigCirclesecondPoint,IsLargeArc = isLargeArc,Size = new Size(bigCircleRadius, bigCircleRadius),SweepDirection = SweepDirection.Clockwise});pathFigure.Segments.Add(new LineSegment { Point = smallCirclesecondPoint });pathFigure.Segments.Add(new ArcSegment{Point = smallCirclefirstPoint,IsLargeArc = isLargeArc,Size = new Size(smallCircleRadius, smallCircleRadius),SweepDirection = SweepDirection.Counterclockwise});PathGeometry pathGeometry = new PathGeometry();pathGeometry.Figures.Add(pathFigure);return pathGeometry;}//根据已保存的大小和文件总大小来计算下载进度百分比private Geometry GetGeometry(){bool isLargeArc =false;double percent = double.Parse(Convert.ToString(savedSize)) / double.Parse(Convert.ToString(fileSize));PercentString = string.Format("{0}%",Math.Round(percent*100,0));double angel = percent * 360D;if(angel>180)isLargeArc=true;//double angel = 45;double bigR = 16;double smallR = 13;Point centerPoint = vl.StartPoint;//new Point(100, 300);Point firstpoint = GetPointOnCir(centerPoint, bigR, 0);Point secondpoint = GetPointOnCir(centerPoint, bigR, angel);Point thirdpoint = GetPointOnCir(centerPoint, smallR, 0);Point fourpoint = GetPointOnCir(centerPoint, smallR, angel);return drawingArc(firstp, secondpoint, thirdpoint, fourpoint, bigR, smallR, isLargeArc);}

 

画圆形的进度条,实际上是动态画两个同心圆,根据文件保存的百分比来计算画弧形的角度的大小,需要7个参数:大圆的半径bigR 、小圆的半径smallR 、同心圆的圆心centerPoint 、大圆的起始点firstpoint 、大圆的结束点secondpoint 、小圆的起始点thirdpoint、小圆的结束点fourpoint

 

 

最后需要使用DrawingContext把圆给画出来:

                public Visual drawShape(){DrawingVisual drawingWordsVisual = new DrawingVisual();DrawingContext drawingContext = drawingWordsVisual.RenderOpen();try{if (savedSize != fileSize){
                                        drawingContext.DrawEllipse(null, new Pen(Brushes.Gray, 3), vl.StartPoint, 13, 13);drawingContext.DrawGeometry(vs.VisualBackgroundBrush, vs.VisualFramePen, GetGeometry());FormattedText formatWords = new FormattedText(PercentString, System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(vs.WordsFont.Name), vs.WordsFont.Size, currentStyle.VisualBackgroundBrush);formatWords.SetFontWeight(FontWeights.Bold);Point startPoint = new Point(vl.StartPoint.X - formatWords.Width / 2, vl.StartPoint.Y - formatWords.Height / 2);drawingContext.DrawText(formatWords, startPoint);}else{drawingContext.DrawEllipse(null, new Pen(Brushes.Green, 3), vl.StartPoint, 16, 16);FormattedText formatWords = new FormattedText("Open", System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(vs.WordsFont.Name), vs.WordsFont.Size, Brushes.Red);formatWords.SetFontWeight(FontWeights.Bold);Point startPoint = new Point(vl.StartPoint.X - formatWords.Width / 2, vl.StartPoint.Y - formatWords.Height / 2);drawingContext.DrawText(formatWords, startPoint);}}catch (Exception ex){new SaveExceptionInfo().SaveLogAsTXTInfoex(ex.Message);}finally{drawingContext.Close();}return drawingWordsVisual;}

转载于:https://www.cnblogs.com/goxmpx/p/3741915.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Discuz论坛架设从零起步之四

前期工作: 按Discuz论坛架设从零起步之一([url]http://waringid.blog.51cto.com/65148/50906[/url]) Discuz论坛架设从零起步之二([url]http://waringid.blog.51cto.com/65148/50940[/url]) Discuz论坛架设从零起步之三…

CSS Grid布局(1)

1.网格容器:通过display属性设置属性值为grid或inline-grid可以创建一个网格容器。网格容器中的所有子元素就会自动变成网格项目(grid item) 1.1网格项目默认放在行中,并且跨网格容器的全宽 2.显示网格:使用grid-template-columns和grid-tem…

logogogo最新变种XP.exe的分析(Win32.Logogo)

作者:清新阳光 ( [url]http://hi.baidu.com/newcenturysun[/url])日期:2007/11/17 (转载请保留此声明) 这是之前logogo.exe病毒的…

深入::first-letter的研究

:first-letter 伪元素用来向文本的第一个字母添加特殊样式 1.::first-letter伪元素生效的前提 1.首先,元素的display计算值必须是 block, inline-block, table-cell, list-item或者table-caption,其他所有display计算值都没有用,包括displa…

[转]Android Activity和Intent机制学习笔记

Activity Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(见http://www.cnblogs.com/feisky/archive/2010/01/01/1637427.html,由系统控制生命周期,程…

聊一聊CSS中的死循环

什么是死循环呢&#xff1f;&#xff1f;比如一个<div>元素里面有一张vertical-align为bottom同时高度为192像素的图片&#xff0c;此时该<div>高度就是192像素&#xff0c;假设此时&#xff0c;插入一个子元素&#xff0c;高度设为100%&#xff0c;如果此时height…

Vh和Vw的简介和使用

Vw:视区宽度百分值 Vh:视区高度百分值 Vmin:取Vw或Vh中较小的那一个 Vmax:取Vw或Vh中较大的那一个 1.视区:是指浏览器内部的可视区域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任务栏标题栏以及底部工具栏的浏览器区域大小 2.场景之元…

江民杀毒软件KV网络版反病毒整体解决方案──金融行业

江民杀毒软件KV网络版反病毒整体解决方案──金融行业江民杀毒软件KV网络版反病毒整体解决方案──金融行业 金融行业是对信息化要求程度极高的行业。它需要一个高效、安全的网络环境来保证信息处理系统能正常有效运行。但随着信息化的应用面越来越广&#xff0c;信息安全…

2014/5/25 多校

A: 1 #include<iostream>2 #include<stdio.h>3 #include<string.h>4 #include<set>5 #define maxn 58*3000006 using namespace std;7 8 set<int>S;9 int Enum0,score[maxn],son[maxn][26],l[maxn];10 bool flag[maxn];//标记是否打星11 int to…

margin:auto实现绝对定位元素的水平垂直居中

1.绝对定位元素的居中实现的一般方法 兼容性不错的主流用法是&#xff1a; 但&#xff0c;这种方法有一个很明显的不足&#xff0c;就是需要提前知道元素的尺寸。否则margin负值的调整无法精确。此时&#xff0c;往往要借助JS获得。 CSS3的兴起&#xff0c;使得有了更好的…

MCSE2003学习之一

MCSE2003之2276&#xff1a;实现2003网络结构&#xff0c;网络主机TCP/IP协议的结构一&#xff1a;OSI模型计算机网络的形成促使网络协议的成熟。IBM在1974年提出了SNA网络协议二&#xff1a;分层模型的网络体系1&#xff1a;OSI/RM开放系统互联ApplicationPresentationSession…

:after伪类+content内容清除浮动

1.简单说说content内容生成 content内容生成就是通过content属性生成内容 例如下面这个简单的例子&#xff1a; 此段样式的作用是在每个h2标签的前面添加文字“我是额外文字”。 2.:after伪类content 清除浮动的影响 有点经验的同行应该知道&#xff0c;一般不含包裹属性…

Pro*c源程序中使用宿主结构保存查询结果

开发环境&#xff1a;VC6 XP Oracle10 Pro*c源程序如下&#xff1a; /*功能&#xff1a;演示了在pro*c源程序中使用结构体(宿主结构)来保存查询结果使用宿主结构的注意事项1. 结构成员的数据类型、顺序必须与内嵌SQL语句中列的数据类型和顺序匹配2. 宿主结构与PL/SQL的记录类…

Vue基础之Vue实例

构造器&#xff1a; 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的&#xff1a; 在实例化 Vue 时&#xff0c;需要传入一个选项对象&#xff0c;它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。 可以通过扩展选项来扩展 Vue 构造器函数…

[HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

介绍本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具&#xff1a;HTML5&#xff0c;JavaScript&#xff0c; CSS3。本篇是HTML5介绍的第三篇&#xff0c;主要介绍HTML5的Canvas API。相关文章&#xff1a;移动Web应用程序开发 HTML5篇 (一) HTML5简介移…