WPF进度条

ProgressBar控件与传统WinForm使用方法完全一样,我们只需关注:

Minimum——最小值,默认为0;

Maximum——最大值,默认为100.

Value——当前值。

关键是它的控件模板,因为系统的默认主题不好看,很多时候我们是需要自定义样式和模板。

老方法,先看定义:

<span style="font-size:16px;">[TemplatePartAttribute(Name = "PART_Track", Type = typeof(FrameworkElement))]  
[TemplatePartAttribute(Name = "PART_Indicator", Type = typeof(FrameworkElement))]  
public class ProgressBar : RangeBase  
</span>  

从类定义中看到,ProgressBar控件的模板有两个部分,我们在定义模板的时候用什么都可以,上面的定义指定是FrameworkElement,因此,只要是继承自FrameworkElement的都可以作为模板的一部分,重点是Name属性一定要和每个部分的名称对应,也就是说你定义的模板部件必须为PART_Track和PART_Indicator.

PART_Indicator是进度条增加指示的形状,即我们看到在滑动的部分;

PART_Track就是后面的背景层,也就是不动的那部分。

明白了这点就好办了。

 <LinearGradientBrush x:Key="g1" StartPoint="0,0" EndPoint="1,1">
  <GradientStop Color="Orange" Offset="0"/>
  <GradientStop Color="Yellow" Offset="0.5"/>
  <GradientStop Color="Orange" Offset="1"/>
 </LinearGradientBrush>
 <Style
     TargetType="{x:Type ProgressBar}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ProgressBar}">
        <Grid MinHeight="14" MinWidth="200">
          <Border 
            Name="PART_Track" 
            CornerRadius="20"
            BorderBrush="Black"
            BorderThickness="1" Background="#FF57C7C9" />
          <Border 
           x:Name="PART_Indicator" 
           CornerRadius="16" 
           BorderBrush="Red" 
           BorderThickness="1" 
           HorizontalAlignment="Left" >
           <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
             <GradientStop Color="Orange" Offset="0"/>
             <GradientStop Color="Yellow" Offset="0.5"/>
             <GradientStop Color="Orange" Offset="1"/>
            </LinearGradientBrush>
           </Border.Background>
          </Border>
        </Grid>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

窗体上放一个ProgressBar控件

 <ProgressBar x:Name="progressBar" Margin="173,113.5,178.187,137"  OverridesDefaultStyle="True" RenderTransformOrigin="0.5,0.5" Value="55">  
   <ProgressBar.RenderTransform>  
    <TransformGroup>  
     <ScaleTransform/>  
     <SkewTransform/>  
     <RotateTransform/>  
     <TranslateTransform/>  
    </TransformGroup>  
   </ProgressBar.RenderTransform>  
   <ProgressBar.Foreground>  
    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">  
     <GradientStop Color="#FF24EE27" Offset="0"/>  
     <GradientStop Color="#FF5434AC" Offset="0.5"/>  
     <GradientStop Color="#FFB371EA" Offset="1"/>  
    </LinearGradientBrush>  
   </ProgressBar.Foreground>  
  </ProgressBar>  
  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏landv

金蝶k/3 K3密码对照破解源码

3391
来自专栏nummy

使用jsTree树形控件【3】HTML结构

jsTree可以将无序列表转换成树形结构,最简单的HTML结构就是使用<ul>以及<li>,而且最好外面还嵌套了一个<div> $('#html1').jst...

1072
来自专栏谦谦君子修罗刀

RN项目第二节 -- 首页实现

3203
来自专栏简书专栏

基于Excel2013的数据转换和清洗

数字可以被设成的格式有12种:常规、数值、货币、会计专用、日期、时间、百分比、分数、科学记数、文本、特殊、自定义

1352
来自专栏向前进

最近遇到的兼容性问题和适配问题

JS: IE: 1、不能添加监听标准事件,添加polyfill initEvent: function initEvent(dom, eventName...

3569
来自专栏AhDung

【C#】使用IExtenderProvider为控件添加扩展属性,像ToolTip那样

- 文中的“控件”一词是广义上的说法,泛指包括ToolStripItem、MenuItem在内单个界面元素,并不特指继承自Control类的狭义控件

882
来自专栏生信宝典

R语言学习 - 图形设置中英字体

绘制生信宝典调查总结文中的柱状图时,出现了中文乱码,就搜索了下解决方案,记录如下。 修改图形的字体 ggplot2中修改图形字体。 # 修改坐标轴和legend...

3298
来自专栏PPV课数据科学社区

pyspider 爬虫教程 (1):HTML 和 CSS 选择

虽然以前写过 如何抓取WEB页面 和 如何从 WEB 页面中提取信息。但是感觉还是需要一篇 step by step 的教程,不然没有一个总体的认识。不过,没想...

4407
来自专栏编程

jQuery第八课

jQuery Callback 方法 Callback 函数在当前动画 100% 完成之后执行。 jQuery 动画的问题 许多 jQuery 函数涉及动画。这...

1956
来自专栏hightopo

原 基于 HTML5 WebGL 的 3D

1774

扫码关注云+社区