WPF----进度条ProgressBar(渐变色)

ProgressBar 是一种用于指示进程或任务的进度的控件,通常在图形用户界面(GUI)中使用。它提供了一种视觉反馈,显示任务的完成程度,帮助用户了解任务的进展情况。

基本特性

  1. Minimum 和 Maximum 属性:

    • 这些属性定义进度的范围。默认情况下,Minimum 为 0,Maximum 为 100。
  2. Value 属性:

    • 这个属性表示当前进度。它应该在 Minimum 和 Maximum 之间。
  3. IsIndeterminate 属性:

    • 如果设置为 True,ProgressBar 将显示一个动画条,而不是实际的进度值。这通常用于无法确定进度百分比的任务。

示例:自定义渐变色 ProgressBar

1. 定义渐变色 ProgressBar 样式

在资源字典或窗口资源中定义 ProgressBar 的样式:

cs 复制代码
 <Style x:Key="RoundedProgressBar" TargetType="ProgressBar">
     <Setter Property="Height" Value="28"></Setter>
     <!--<Setter Property="Width" Value="600"></Setter>-->
     <Setter Property="Foreground" Value="#E6E6E6"></Setter>
     <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="ProgressBar">
                 <Grid>
                     <Border x:Name="PART_Track"
                             Background="#404040"
                             CornerRadius="7"
                             BorderBrush="#666"
                             BorderThickness="1">
                         <Border x:Name="PART_Indicator"
                                 CornerRadius="7,0,0,7"
                                 HorizontalAlignment="Left"
                                 Width="0">
                             <Border.Background>
                                 <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
                                     <GradientStop Color="#FF669FB1"  Offset="1.0" />
                                     <GradientStop Color="#90669FB3" Offset="0.5" />
                                     <GradientStop Color="#A6669FB1" Offset="0.35" />
                                     <GradientStop Color="#00669FB1" Offset="0.0" />
                                 </LinearGradientBrush>
                             </Border.Background>
                         </Border>
                     </Border>
                 </Grid>
                 <ControlTemplate.Triggers>
                     <Trigger Property="IsIndeterminate" Value="True">
                         <Setter TargetName="PART_Indicator" Property="Background" Value="Green"/>
                     </Trigger>
                     <Trigger Property="IsIndeterminate" Value="False">
                         <!--<Setter TargetName="PART_Indicator" Property="Width" 
                                 Value="{Binding RelativeSource={RelativeSource TemplatedParent}, 
                                 Path=ActualWidth, Converter={StaticResource ProgressWidthConverter}}"/>-->
                     </Trigger>
                 </ControlTemplate.Triggers>
             </ControlTemplate>
         </Setter.Value>
     </Setter>
 </Style>
2. 在 XAML 中使用 ProgressBar 控件:
cs 复制代码
 <Grid >
     <ProgressBar Style="{StaticResource RoundedProgressBar}"  HorizontalAlignment="Stretch"   Value="{Binding ProgressValue}"  Minimum="0" Maximum="100"  />
     <TextBlock TextAlignment="Center" Foreground="#E6E6E6" VerticalAlignment="Center" >
         <Run Text="{Binding ProgressValue}"></Run>
         <Run>%</Run></TextBlock>
 </Grid>
3. ViewModel

ViewModel 中定义一个绑定到 ProgressBar 的属性ProgressValue:

cs 复制代码
 [ObservableProperty]
 private int _progressValue = 0;
4.渐变色颜色解析

设置颜色与透明度关系

在 WPF 中,颜色的透明度是通过 ARGB (Alpha, Red, Green, Blue) 值表示的,其中 Alpha 值控制透明度。Alpha 值范围是 0 到 255,其中 0 表示完全透明,255 表示完全不透明。

如果你想要 35% 的透明度,你可以计算相应的 Alpha 值。35% 透明度意味着 65% 不透明度,因此你可以使用以下公式来计算 Alpha 值:

Alpha=255×65100=255×0.65≈166\text{Alpha} = 255 \times \frac{65}{100} = 255 \times 0.65 \approx 166Alpha=255×10065​=255×0.65≈166

因此,Alpha 值大约是 166,对应的十六进制值是 A6。

所以对应的颜色值为#A6669FB1。

最终结果如下:

相关推荐
donk131414 小时前
React Native for OpenHarmony 实战:三方库 react-native-circular-action-menu 的鸿蒙化适配指南
javascript·分布式·react native·react.js·wpf·harmonyos
donk13141 天前
React Native for OpenHarmony 实战:三方库 react-native-step-indicator 的鸿蒙化适配指南
分布式·react native·react.js·wpf·harmonyos
He BianGu1 天前
【笔记】WPF中RenderOptions类的详细功能
笔记·wpf
VidDown2 天前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码
He BianGu2 天前
【笔记】WPF中CachingHint的功能
笔记·wpf
He BianGu2 天前
【笔记】在WPF中BitmapScalingMode的作用
笔记·wpf
Vae_Mars2 天前
幂等性学习笔记
笔记·学习·wpf
samble3 天前
从零搭建灌装监控系统(十九):单元测试实战,xUnit + 内存SQLite + 反射测试私有方法
c#·wpf·mvvm·modbus·工业控制
光泽雨4 天前
路由概念和路由事件 继承链路 RadioButton的事件解析
wpf
samble4 天前
从零搭建灌装监控系统(十八):自定义控件,三色灯与状态指示
c#·wpf·mvvm·modbus·工业控制