一、前言

滚动条一般用于加载进度,我们在看视频的时候或者在浏览网页的时候经常能看到加载进度的页面。在程序开发中,默认的进度加载样式可能跟程序风格不太一样,或者加载进度的时候需要更改一下加载的样式。这个时候就需要通过修改ProgressBar的样式来实现。

二、ProgressBar的基本样式

ProgressBar的基本样式很简单:

  1. <Style TargetType="{x:Type ProgressBar}">
  2. <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
  3. <Setter Property="SnapsToDevicePixels" Value="True"/>
  4. <Setter Property="Height" Value="15"/>
  5. <Setter Property="Background" Value="#6fae5f"/>
  6. <Setter Property="FontSize" Value="10"/>
  7. <Setter Property="Padding" Value="5,0"/>
  8. <Setter Property="Template">
  9. <Setter.Value>
  10. <ControlTemplate TargetType="{x:Type ProgressBar}">
  11. <Grid Background="#00000000">
  12. <Grid.RowDefinitions>
  13. <RowDefinition Height="Auto"/>
  14. </Grid.RowDefinitions>
  15. <VisualStateManager.VisualStateGroups>
  16. <VisualStateGroup x:Name="CommonStates">
  17. <VisualState x:Name="Determinate"/>
  18. <VisualState x:Name="Indeterminate">
  19. <Storyboard RepeatBehavior="Forever">
  20. <PointAnimationUsingKeyFrames Storyboard.TargetName="Animation" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
  21. <EasingPointKeyFrame KeyTime="0:0:0" Value="0.5,0.5"/>
  22. <EasingPointKeyFrame KeyTime="0:0:1.5" Value="1.95,0.5"/>
  23. <EasingPointKeyFrame KeyTime="0:0:3" Value="0.5,0.5"/>
  24. </PointAnimationUsingKeyFrames>
  25. </Storyboard>
  26. </VisualState>
  27. </VisualStateGroup>
  28. </VisualStateManager.VisualStateGroups>
  29.  
  30. <Grid Height="{TemplateBinding Height}">
  31. <Border Background="#000000" CornerRadius="7.5" Opacity="0.05"/>
  32. <Border BorderBrush="#000000" BorderThickness="1" CornerRadius="7.5" Opacity="0.1"/>
  33. <Grid Margin="{TemplateBinding BorderThickness}">
  34. <Border x:Name="PART_Track"/>
  35. <Grid x:Name="PART_Indicator" ClipToBounds="True" HorizontalAlignment="Left" >
  36. <Grid.ColumnDefinitions>
  37. <ColumnDefinition x:Name="width1"/>
  38. <ColumnDefinition x:Name="width2" Width="0"/>
  39. </Grid.ColumnDefinitions>
  40. <Grid x:Name="Animation" RenderTransformOrigin="0.5,0.5">
  41. <Grid.RenderTransform>
  42. <TransformGroup>
  43. <ScaleTransform ScaleY="-1" ScaleX="1"/>
  44. <SkewTransform AngleY="0" AngleX="0"/>
  45. <RotateTransform Angle="180"/>
  46. <TranslateTransform/>
  47. </TransformGroup>
  48. </Grid.RenderTransform>
  49. <Border Background="{TemplateBinding Background}" CornerRadius="7.5">
  50. <Viewbox HorizontalAlignment="Left" StretchDirection="DownOnly" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="True">
  51. <TextBlock Foreground="#ffffff" SnapsToDevicePixels="True" FontSize="{TemplateBinding FontSize}" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Value,StringFormat={}{0}%}" RenderTransformOrigin="0.5,0.5">
  52. <TextBlock.RenderTransform>
  53. <TransformGroup>
  54. <ScaleTransform ScaleY="1" ScaleX="-1"/>
  55. <SkewTransform AngleY="0" AngleX="0"/>
  56. <RotateTransform Angle="0"/>
  57. <TranslateTransform/>
  58. </TransformGroup>
  59. </TextBlock.RenderTransform>
  60. </TextBlock>
  61. </Viewbox>
  62. </Border>
  63. <Border BorderBrush="#000000" BorderThickness="1" CornerRadius="7.5" Opacity="0.1"/>
  64. </Grid>
  65. </Grid>
  66. </Grid>
  67. </Grid>
  68. </Grid>
  69. <ControlTemplate.Triggers>
  70.  
  71. <Trigger Property="IsEnabled" Value="False">
  72. <Setter Property="Background" Value="#c5c5c5"/>
  73. </Trigger>
  74. <Trigger Property="IsIndeterminate" Value="true">
  75. <Setter TargetName="width1" Property="Width" Value="0.25*"/>
  76. <Setter TargetName="width2" Property="Width" Value="0.725*"/>
  77. </Trigger>
  78. </ControlTemplate.Triggers>
  79. </ControlTemplate>
  80. </Setter.Value>
  81. </Setter>
  82. </Style>

引用示例:

  1. <ProgressBar Height="15" Width="150" Value="40" Margin="10"/>

显示效果:

所有代码已经上传到github:https://github.com/cmfGit/WpfDemo.git

WPF 自定义ProgressBar滚动条样式的更多相关文章

  1. WPF 自定义键盘焦点样式(FocusVisualStyle)

    WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌.这时,其自带的键盘焦点样式(FocusVisualSt ...

  2. jQuery 自定义网页滚动条样式插件 mCustomScrollbar 的介绍和使用方法(转)

    系统默认的滚动条样式,真的已经看的够恶心了.试想一下,如果在一个很有特色和创意的网页中,出现了一根系统中默认的滚动条样式,会有多么的别扭. 为了自己定义网页中的滚动条的方法,我真的已经找了很久了,就目 ...

  3. [分享] 通过修改CSS自定义chrome滚动条样式

    首先得说一句 我不懂CSS的写法之类的 这段CSS也是在网上找的 所以有更先进的需求的话 我肯定不能满足你们了 不好意思效果图在10楼有人上了 我这边不管怎么弄 上传图片都卡在96% 而且不翻wall ...

  4. WPF自定义Window窗体样式

    资源文件代码: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation ...

  5. CSS3自定义浏览器滚动条样式

    一个完整滚动条右以下部分组成: ::-webkit-scrollbar 滚动条整体部分,常用属性:width,height,background,border: ::-webkit-scrollbar ...

  6. Android 自定义ListView滚动条样式

    使用ListView FastScroller,默认滑块和自定义滑块图片的样子: 设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可: <ListView android:id=&qu ...

  7. WPF 自定义滚动条样式

    先看一下效果: 先分析一下滚动条有哪儿几部分组成: 滚动条总共有五部分组成: 两端的箭头按钮,实际类型为RepeatButton Thumb 两端的空白,实际也是RepeatButton 最后就是Th ...

  8. WPF 自定义滚动条(ScrollView、ScrollBar)样式

    一.滚动条基本样式 本次修改Scrollview及ScrollBar滚动条样式是通过纯样式实现的.修改的内容包含滚动条的颜色,上下按钮的隐藏.另外添加了鼠标经过滚动条动画. style样式如下: &l ...

  9. CSS3自定义滚动条样式 -webkit-scrollbar(转)

    有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了.那webkit浏览器是如何自定义滚动条的呢? 前言 ...

随机推荐

  1. DQN核心思想理解

    看过Deep learning(convolutional neural network),看过RL(Q-learning).但是在两者结合这一块一直弄不明白. 我的疑问在于一直不明白DL是怎样识别出 ...

  2. 200. Number of Islands + 695. Max Area of Island

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  3. Shodan搜索引擎介绍

    from:http://www.exploit-db.com/wp-content/themes/exploit/docs/33859.pdf 0x00 概要 这篇文章可以作为渗透测试人员和安全工作者 ...

  4. js 联动实现日期选择,一般用作生日

    实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日select为input中的时间.否则为空.年默认区间段为1900年 ...

  5. 创建Spring工程的基本步骤

    第一步:加入jar包 第二步:创建配置文件 -申明javabean 配置 <?xml version="1.0" encoding="UTF-8"?> ...

  6. bzoj5152 [Wc2018]通道

    题目链接 正解:不会做. 写一个爬山算法就过官方数据了(逃 具体来说就是每次随机一个根,然后迭代找最长路的那个点. 多随机几次取$max$就行了.正解以后再补.. #include <bits/ ...

  7. 安装MySql-Python遇到的错误及解决方法

    用pip安装mysql-python时报错: _mysql.c _mysql.c(42) : fatal error C1083: Cannot open include file: 'config- ...

  8. web页面显示当前系统时间并定时刷新

    function showCurrentDate(){ var today,hour,second,minute,year,month,date; var strDate ; today=new Da ...

  9. BZOJ2346:[Baltic 2011]Lamp(最短路)

    Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...

  10. js 获取后台数据分页

    页面创建一个存放内容的容器,以及分页的容器: <div id="content"></div> <div id="pager"&g ...