WPF如何自定义ProgressBar滚动条样式

作者:一叶知秋,知寒冬 时间:2021-08-02 13:31:44 

一、前言

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

二、ProgressBar的基本样式

ProgressBar的基本样式很简单:


<Style TargetType="{x:Type ProgressBar}">
  <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
  <Setter Property="SnapsToDevicePixels" Value="True"/>
  <Setter Property="Height" Value="15"/>
  <Setter Property="Background" Value="#6fae5f"/>
  <Setter Property="FontSize" Value="10"/>
  <Setter Property="Padding" Value="5,0"/>
  <Setter Property="Template">
   <Setter.Value>
    <ControlTemplate TargetType="{x:Type ProgressBar}">
     <Grid Background="#00000000">
      <Grid.RowDefinitions>
       <RowDefinition Height="Auto"/>
      </Grid.RowDefinitions>
      <VisualStateManager.VisualStateGroups>
       <VisualStateGroup x:Name="CommonStates">
        <VisualState x:Name="Determinate"/>
        <VisualState x:Name="Indeterminate">
         <Storyboard RepeatBehavior="Forever">
          <PointAnimationUsingKeyFrames Storyboard.TargetName="Animation" Storyboard.TargetProperty="(UIElement.RenderTransformOrigin)">
           <EasingPointKeyFrame KeyTime="0:0:0" Value="0.5,0.5"/>
           <EasingPointKeyFrame KeyTime="0:0:1.5" Value="1.95,0.5"/>
           <EasingPointKeyFrame KeyTime="0:0:3" Value="0.5,0.5"/>
          </PointAnimationUsingKeyFrames>
         </Storyboard>
        </VisualState>
       </VisualStateGroup>
      </VisualStateManager.VisualStateGroups>

<Grid Height="{TemplateBinding Height}">
       <Border Background="#000000" CornerRadius="7.5" Opacity="0.05"/>
       <Border BorderBrush="#000000" BorderThickness="1" CornerRadius="7.5" Opacity="0.1"/>
       <Grid Margin="{TemplateBinding BorderThickness}">
        <Border x:Name="PART_Track"/>
        <Grid x:Name="PART_Indicator" ClipToBounds="True" HorizontalAlignment="Left" >
         <Grid.ColumnDefinitions>
          <ColumnDefinition x:Name="width1"/>
          <ColumnDefinition x:Name="width2" Width="0"/>
         </Grid.ColumnDefinitions>
         <Grid x:Name="Animation" RenderTransformOrigin="0.5,0.5">
          <Grid.RenderTransform>
           <TransformGroup>
            <ScaleTransform ScaleY="-1" ScaleX="1"/>
            <SkewTransform AngleY="0" AngleX="0"/>
            <RotateTransform Angle="180"/>
            <TranslateTransform/>
           </TransformGroup>
          </Grid.RenderTransform>
          <Border Background="{TemplateBinding Background}" CornerRadius="7.5">
           <Viewbox HorizontalAlignment="Left" StretchDirection="DownOnly" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="True">
            <TextBlock Foreground="#ffffff" SnapsToDevicePixels="True" FontSize="{TemplateBinding FontSize}" VerticalAlignment="Center" Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Value,StringFormat={}{0}%}" RenderTransformOrigin="0.5,0.5">
             <TextBlock.RenderTransform>
              <TransformGroup>
               <ScaleTransform ScaleY="1" ScaleX="-1"/>
               <SkewTransform AngleY="0" AngleX="0"/>
               <RotateTransform Angle="0"/>
               <TranslateTransform/>
              </TransformGroup>
             </TextBlock.RenderTransform>
            </TextBlock>
           </Viewbox>
          </Border>
          <Border BorderBrush="#000000" BorderThickness="1" CornerRadius="7.5" Opacity="0.1"/>
         </Grid>
        </Grid>
       </Grid>
      </Grid>
     </Grid>
     <ControlTemplate.Triggers>

<Trigger Property="IsEnabled" Value="False">
       <Setter Property="Background" Value="#c5c5c5"/>
      </Trigger>
      <Trigger Property="IsIndeterminate" Value="true">
       <Setter TargetName="width1" Property="Width" Value="0.25*"/>
       <Setter TargetName="width2" Property="Width" Value="0.725*"/>
      </Trigger>
     </ControlTemplate.Triggers>
    </ControlTemplate>
   </Setter.Value>
  </Setter>
 </Style>

引用示例:


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

显示效果:

WPF如何自定义ProgressBar滚动条样式

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

来源:https://www.cnblogs.com/xiaomingg/p/8886884.html

标签:wpf,progressbar,滚动条
0
投稿

猜你喜欢

  • 使用Maven Helper解决Maven插件冲突的方法

    2023-11-08 06:07:05
  • Java Calendar类使用案例详解

    2023-07-09 14:03:22
  • 浅谈基于SpringBoot实现一个简单的权限控制注解

    2022-01-23 16:42:47
  • DUCC配置平台实现一个动态化线程池示例代码

    2023-11-28 12:07:39
  • java实现简单计算器功能

    2021-06-17 11:21:23
  • Java实现班级管理系统

    2022-05-08 07:29:48
  • JPA配置方式+逆向工程映射到Entity实体类

    2023-07-28 12:09:48
  • springboot整合@Retryable实现重试功能的示例代码

    2023-11-27 11:08:20
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    2021-11-05 12:30:18
  • Java常用函数式接口总结

    2022-02-02 00:02:50
  • Spring之动态注册bean的实现方法

    2023-09-26 14:01:17
  • springboot maven 项目打包jar 最后名称自定义的教程

    2021-08-12 00:01:11
  • 新手入门Jvm-- JVM对象创建与内存分配机制

    2021-11-04 19:28:10
  • SpringMVC中的Model对象用法说明

    2022-12-15 02:24:34
  • Java实现简单猜拳游戏

    2023-05-27 18:28:16
  • C#将PDF转为多种图像文件格式的方法(Png/Bmp/Emf/Tiff)

    2022-06-29 16:13:03
  • MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    2023-09-02 10:18:59
  • Java实现简易扑克牌游戏的完整实例

    2022-10-08 14:09:18
  • Java简单实现定时器

    2023-07-16 18:10:58
  • java中对象调用成员变量与成员实例方法

    2023-08-04 11:42:49
  • asp之家 软件编程 m.aspxhome.com