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 条评论
登录 后参与评论

相关文章

来自专栏進无尽的文章

绘图-视图遮罩MaskView的使用

可以这样理解,是将maskView每个point的alpha赋值给View的重叠部分相对应的point,这样view的重叠每个point都有个alpha值了,v...

662
来自专栏向治洪

React Native导航器之react-navigation使用

在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigatio...

1.1K7
来自专栏HTML5学堂

HTML5-类库系列 事件与获取完成版样式

HTML5学堂:最近讲师团队在学习JS类库的知识,因此就跟大家一起共享一下类库的搭建吧。今天要讲解的功能是:获取渲染后样式以及事件兼容处理。渲染后样式修正了通过...

3297
来自专栏偏前端工程师的驿站

JS魔法堂:精确判断IE的文档模式by特征嗅探

一、前言                                 苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持...

1819
来自专栏Venyo 的专栏

WinForm 为 DataGridViewCell 绑定 DataGridView

先上效果图。 ? ? 对外提供一个 public 的方法: // 正常 Type1 是 JSON 的数据集或者 BSON 的数据集 public void ...

2205
来自专栏君赏技术博客

Jekyll-Admin-Mac-模板处理

制作导航条 使用网络框架Alamofire 使用 SwiftyJSON iOS10开启启用 HTTP 请求 使用 ObjectMapper ...

453
来自专栏前端儿

图片轮播(淡入淡出)--JS原生和jQuery实现

图片轮播(淡入淡出)--js原生和jquery实现 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为...

841
来自专栏技术之路

silverlight ListBox 多列图片效果

这个功能之前用wpf写过一次这次用Silverlight写一次 这两种写法上基本上没有太大的差别 这个Demo并不完美,只是给大家提供一个思路 源码:Silve...

1927
来自专栏梧雨北辰的开发录

Swift开发:自定义标签栏UITabBarController (Swift项目开始的第一步)

自定义UITabbarController进而自定义UITabbar,这通常会是一个iOS项目开始的重要环节。在Swift的学习过程中,个人感觉虽说两种语言的相...

3387
来自专栏极客生活

数据分析Excel之常用快捷键

下面是mac下常用的的excel快捷键,其中Cmd在windows下对应Ctrl键

681

扫描关注云+社区