WPF设计带数字标签显示的进度条

先上图

1.xaml代码

<Style x:Key="ProgressBarStyle" TargetType="{x:Type ProgressBar}">
        <Setter Property="Foreground" Value="#FF06B025"/>
        <Setter Property="Background" Value="#FFE6E6E6"/>
        <Setter Property="BorderBrush" Value="#FFBCBCBC"/>
        <Setter Property="attach:AttachProperty.Percentage" Value=""></Setter>
        <Setter Property="Height" Value="35"/>
        <Setter Property="Width" Value="600"></Setter>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ProgressBar}">
                    <Grid x:Name="TemplateRoot">
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="Determinate"/>
                                <VisualState x:Name="Indeterminate">
                                    <Storyboard RepeatBehavior="Forever">
                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" Storyboard.TargetName="Animation">
                                            <EasingDoubleKeyFrame KeyTime="0" Value="0.25"/>
                                            <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.25"/>
                                            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="0.25"/>
                                        </DoubleAnimationUsingKeyFrames>
                                        <PointAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)" Storyboard.TargetName="Animation">
                                            <EasingPointKeyFrame KeyTime="0" Value="-0.5,0.5"/>
                                            <EasingPointKeyFrame KeyTime="0:0:1" Value="0.5,0.5"/>
                                            <EasingPointKeyFrame KeyTime="0:0:2" Value="1.5,0.5"/>
                                        </PointAnimationUsingKeyFrames>
                                    </Storyboard>
                                </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Border CornerRadius="18" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"/>
                        <Rectangle RadiusX="18" RadiusY="18" x:Name="PART_Track"/>
                        <Grid x:Name="PART_Indicator" ClipToBounds="True" HorizontalAlignment="Left">
                            <Rectangle RadiusX="18" RadiusY="18" x:Name="Indicator" Fill="{TemplateBinding Foreground}"/>
                            <Label  FontSize="14" VerticalAlignment="Center" Content="{TemplateBinding attach:AttachProperty.Percentage}" HorizontalContentAlignment="Center" HorizontalAlignment="Right" VerticalContentAlignment="Center" Background="Transparent" Foreground="White" Panel.ZIndex="1" Margin="{Binding Margin, ElementName=Animation}"></Label>
                            <Rectangle RadiusX="18" RadiusY="18" x:Name="Animation" Fill="{TemplateBinding Foreground}" RenderTransformOrigin="0.5,0.5">
                                <Rectangle.RenderTransform>
                                    <TransformGroup>
                                        <ScaleTransform/>
                                        <SkewTransform/>
                                        <RotateTransform/>
                                        <TranslateTransform/>
                                    </TransformGroup>
                                </Rectangle.RenderTransform>
                            </Rectangle>
                        </Grid>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="Orientation" Value="Vertical">
                            <Setter Property="LayoutTransform" TargetName="TemplateRoot">
                                <Setter.Value>
                                    <RotateTransform Angle="-90"/>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                        <Trigger Property="IsIndeterminate" Value="True">
                            <Setter Property="Visibility" TargetName="Indicator" Value="Collapsed"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

2.附加属性

public static string GetPercentage(DependencyObject obj)
        {
            return (string)obj.GetValue(PercentageProperty);
        }

        public static void SetPercentage(DependencyObject obj, string value)
        {
            obj.SetValue(PercentageProperty, value);
        }
        //百分比展示
        // Using a DependencyProperty as the backing store for Percentage.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty PercentageProperty =
            DependencyProperty.RegisterAttached("Percentage", typeof(string), typeof(AttachProperty), new PropertyMetadata(""));

3.在设计器中使用

<ProgressBar Name="pro" Style="{StaticResource ProgressBarStyle}" ath:AttachProperty.Percentage="{Binding Percentage}" Height="35" Foreground="#ff2791ff" Background="#ffe5e9f0" Width="600" Value="0" Maximum="100"></ProgressBar>

4.逻辑代码

private void Func(object obj)
        {
            for (int i = 0; i <= 100; i++)
            {
                this.pro.Dispatcher.Invoke(new Action(()=> {
                    StyleLibrary.Core.AttachProperty.SetPercentage(pro, i.ToString() + "%");
                    pro.Value = i;
                }));
                Thread.Sleep(100);
            }
        }

//调用
ThreadPool.QueueUserWorkItem(Func,null);

5.知识点:附加属性;绑定;样式;

原文地址:https://www.cnblogs.com/zhuiyishanran/p/11693125.html

时间: 2024-08-04 00:00:51

WPF设计带数字标签显示的进度条的相关文章

Python HTTP下载文件并显示下载进度条

下面的Python脚本中利用request下载文件并写入到文件系统,利用progressbar模块显示下载进度条. 其中利用request模块下载文件可以直接下载,不需要使用open方法,例如: import urllib import requests.packages.urllib3 requests.packages.urllib3.disable_warnings() url = "https://raw.githubusercontent.com/racaljk/hosts/maste

python实现显示安装进度条

一直很好奇那种安装进度条,或者启动程序时候显示的进度条是怎么实现的,学习了python之后,sys模块中有个方法可以实现,代码如下: 1 2 3 4 5 6 import sys,time for i in range(50):#循环50次 sys.stdout.write('#')#向终端输出# #在这中间就可以做你想要的处理了,处理完之后结束循环即可 sys.stdout.flush()#立即输出,如果不加这个的话,它会等缓冲区满了之后才显示 time.sleep(1)#sleep一秒再输出

圆角进度条,带数字居中显示的圆角进度条

自己实现一个圆角进度条,待文字显示居中的圆角进度条,这在很多实际项目当中都会用到的 github地址:https://github.com/yongfengnice/CircleProgress 效果图如下所示:

thinkpad 睡眠唤醒后热键功能正常,但屏幕无法显示状态/进度条/图标

由于博主比较习惯笔记本开盖即用,合盖即走,不大习惯开机关机(毕竟SSD速度杠杠滴^_^).可是发现笔记本长时间睡眠乃至休眠唤醒后,使用thinkpad热键,虽然可以调节,但屏幕不显示调节状态了.解决步骤如下: 1. 在桌面鼠标右键,选择[屏幕分辨率],如果无此选项,打开控制面板,“排列方式”选择“小图标”,选择“显示”选项,找到[屏幕分辨率设置]. 2. 在弹出窗口中,选择[高级设置] 3. 在弹出窗口中,切换到[屏幕显示]选项卡,确保[启用屏幕显示]为勾选状态,先将[数字锁定和大小写锁定的指示

BootStrap学习(4)_分页&amp;标签&amp;缩略图&amp;警告&amp;进度条

一.分页 分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页.  .pagination     --添加该 class 来在页面上显示分页. .disabled         --定义不可点击的链接 .active             --指示当前页面 .pagination-lg, .pagination-sm   --标签大小 .pager         --翻页 1.分页 <!DOCTYPE html> <html xmlns

linux下命令行工具gcp显示拷贝进度条

1.环境: ubuntu16.04 Linux jello 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 2.背景: 最近在linux下拷贝文件时由于文件比较大,好久shell都没有动静,因此找到了一个可以显示进度条的命令行拷贝工具gcp 3.安装 sudo apt-get install gcp -y

基于&lt;MediaElement&gt;的WPF视频播放器(可拖拽进度条播放)

一.前言       前两天上峰要求做一个软件使用向导,使用WPF制作.这不,这两天从一张白纸开始学起,做一个播放演示视频的使用向导.以下是粗设计的原型代码: 二.效果图 三.代码 前台代码: 1 <Window 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd卡上的全部图片读取,并显示出来.读取的过程有进度条显示. 制作步骤例如以下: 1.首先,res\values\strings.xml对字符设置例如以下,没有什么特别的. <? xml version="1.0" encoding="utf-8"?> <

UI: 使用UIProgressView显示进度条

1.问题 你想在屏幕上显示一个进度条来??述某任务的进度.例如,从 URL 下载一个文件的进 度条. 2. 进度视图是 UIProgressView 的一个实例对象,并被此类设计好的初始化器初始化,使用 initWithProgressViewStyle:这个方法.这个方法的参数可以指定进度条的风格.这个参数是 UIPogressViewStyle 类型,并可以是以下所示的值: UIProgressViewStyleDefault    这是默认的风格. UIProgressViewStyleB