使用Visual来画图,可以使用其派生类,UIElement、Viewport3DVisual用于呈现3D内容,其他可以用来画图的为DrawingVisual,使用DrawingVisual可以使用编程的方式来实现复杂的图形实现,当使用DrawingVisual,必须使用FrameworkElement作为宿主容器,用来提供DrawingVisual所缺乏的布局和事件支持。下面实现了使用DrawingVisual来实现进度条,主要使用RectAnimation来实现。DrawRoundedRectangle(Brush brush, Pen pen, Rect rectangle, AnimationClock rectangleAnimations, double radiusX, AnimationClock radiusXAnimations, double radiusY, AnimationClock radiusYAnimations)方法的使用RectAnimation对象的AnimationClock对 Rec进行动画处理。

        RectAnimation myRectAnimation;
public override System.Windows.Media.Visual drawShape()
{
DrawingVisual drawingWordsVisual = new DrawingVisual();
DrawingContext drawingContext = drawingWordsVisual.RenderOpen();
try
{
Rect rect2 = new Rect(currentLayout.StartPoint.X,
                        currentLayout.StartPoint.Y, VisusalSize.Width, );
Rect rect3 = new Rect(currentLayout.StartPoint.X,
                        currentLayout.StartPoint.Y, VisusalSize.Width, );

                        Rect rect1 = new Rect(currentLayout.StartPoint.X, currentLayout.StartPoint.Y, , );
//Rect rect4 = new Rect(currentLayout.StartPoint.X, currentLayout.StartPoint.Y, VisusalSize.Width*0.5, 0); myRectAnimation = new RectAnimation(); myRectAnimation.Duration = TimeSpan.FromSeconds();
myRectAnimation.FillBehavior = FillBehavior.HoldEnd; myRectAnimation.From = rect1;
//myRectAnimation.By = rect4;
myRectAnimation.To = rect3; _showFilePanelClock = myRectAnimation.CreateClock(); _showFilePanelClock.Controller.Pause(); GradientStop gs1 = new GradientStop(Color.FromRgb(, ,
                        ), );
GradientStop gs2 = new GradientStop(Color.FromRgb(, ,
                        ), );
GradientStopCollection gsc = new GradientStopCollection();
gsc.Add(gs1);
gsc.Add(gs2);
Brush colorbrush = new LinearGradientBrush(gsc,
                         new Point(, ), new Point(, 0.8));
Brush solidBrush = new SolidColorBrush(Color.FromRgb(,
                        , ));
drawingContext.DrawRectangle(solidBrush, new Pen(), rect2);
drawingContext.DrawRoundedRectangle(colorbrush, new Pen(),
                        rect1, _showFilePanelClock, , null, , null);
}
catch (Exception ex)
{
new SaveExceptionInfo().SaveLogAsTXTInfoex(ex.Message);
}
finally
{
drawingContext.Close();
}
return drawingWordsVisual;
}

使用下面的方法来控制进度条的进度,根据要显示的百分比,使用ClockController.Seek来控制进度条的进度。

public void FilesavedSize_saveSizeChanged(object sender, SendFileEventArgs args)
{
double percent = double.Parse(args.SavedSize.ToString())
             / double.Parse(args.FileSize.ToString());
TimeSpan timeSpan = TimeSpan.FromMilliseconds(percent * );
_showFilePanelClock.Controller.Seek(timeSpan,
              TimeSeekOrigin.BeginTime);
_showFilePanelClock.Controller.Pause();
}

RectAnimation用于在DrawingVisual画进度条的更多相关文章

  1. html5 canvas画进度条

    这个ie8的兼容是个问题,ie8 的innerHTML有问题啊,添加两个附件吧 <!DOCTYPE html> <html> <head> <meta cha ...

  2. CProgressCtrl进度条

    CProgressCtrl进度条 使用方法总结 标签: CProgressCtrlmfc 2016-03-03 09:19 762人阅读 评论(0) 收藏 举报  分类: MFC(11)  版权声明: ...

  3. android 自定义进度条颜色

    android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程!   这个没法了只能看源码了,还好下载了源码, sources\b ...

  4. QStandardItemModel简单好用,QTableView带进度条

    类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据.与此不 ...

  5. android113 自定义进度条

    MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...

  6. Android ProgressBar 反向进度条/进度条从右到左走

    近期的项目,有个需求须要使用条状图显示比例,而且右对齐,见下图: 我想到了使用进度条,这样不就不须要在代码动态绘制条状了,省了非常多活. 那么进度条如何从右向左显示呢? 方案一: 将ProgressB ...

  7. Android自定义一款带进度条的精美按键

    Android中自定义View并没有什么可怕的,拿到一个需要自定义的View,首先要做的就是把它肢解,然后思考每一步是怎样实现的,按分析的步骤一步一步的编码实现,最后你就会发现达到了你想要的效果.本文 ...

  8. [Delphi]带进度条的ListView

    带进度条的ListView unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, C ...

  9. 自己定义进度条PictureProgressBar——从开发到开源公布全过程

    自己定义进度条PictureProgressBar--从开发到开源公布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创.转载请注明本出处! 本项目JCenter地址:ht ...

随机推荐

  1. 你真的会用AsyncTask吗?(一)

    一个典型AsyncTask的. view source print? 01 public class DialogTestActivity extends Activity { 02     priv ...

  2. IOS AFNetworking

    http://www.coneboy.com/?p=716 AFNetworking 使用总结 (用法+JSON解析) 2013 年 4 月 11 日  No comments Article 这几天 ...

  3. 在服务器上远程链接另一台服务器的数据库的方法how to connet the database from the other host

    iwangzheng.com 16:57 [root@a02.cmsapi]$ mysql -u<username> -p<password> -h10.103.xx.xx W ...

  4. Linux Apache prefork和worker的原理详解

    prefork(多进程,每个进程产生子进程)和worker(多进程,每个进程生成多个线程)    prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinS ...

  5. HDOj 1010 DFS优化

    #include<cstdio> #include<cstring> ]={,,,-}; ]={,,-,}; ][]; int x1,y1,x2,y2; int step; i ...

  6. 播放视频最好的 HTML 解决方法

    HTML 5 + <object> + <embed> <video width=" controls="controls"> < ...

  7. GLSL Entry point not found

    解决方案: 在引用OpenGL的头文件 #include <GL/glew.h>#include <GL/glut.h> 前添加 #define GLUT_DISABLE_AT ...

  8. 电话连线(codevs 1003)

    题目描述 Description 一个国家有n个城市.若干个城市之间有电话线连接,现在要增加m条电话线(电话线当然是双向的了),使得任意两个城市之间都直接或间接经过其他城市有电话线连接,你的程序应该能 ...

  9. Eclipse 代码格式化

    http://blog.csdn.net/prstaxy/article/details/7839197 http://jingyan.baidu.com/article/9158e00044efb6 ...

  10. Ubuntu和windows共享文件夹

    参考文章: http://www.cnblogs.com/zhengyuxin/articles/1938414.html