# ProgressBar 自定义样式指南 ProgressBar 家族(ProgressBar、CircleProgress、DashboardProgress、StepsProgressBar)的视觉表现通过自定义渲染 + Design Token 系统控制。由于进度条采用 `DrawingContext` 直接绘制,样式自定义主要通过属性控制和 Token 覆盖实现。 --- ## 1. 使用属性直接控制 ### 线形进度条(ProgressBar) ```xml ``` ### 圆形进度条(CircleProgress) ```xml ``` ### 仪表盘进度条(DashboardProgress) ```xml ``` ### 步骤进度条(StepsProgressBar) ```xml ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/ProgressBarShowCase.axaml` --- ## 2. 自定义颜色 ### 自定义描边颜色 ```xml ``` ### 自定义轨道颜色 ```xml ``` ### 每个步骤独立颜色 ```xml ``` ```csharp // ViewModel public List StepsChunkBrushes { get; } = new() { new SolidColorBrush(Colors.Green), new SolidColorBrush(Colors.Green), new SolidColorBrush(Colors.Orange), new SolidColorBrush(Colors.Red), new SolidColorBrush(Colors.Red), }; ``` --- ## 3. 成功阈值 ```xml ``` --- ## 4. 百分比标签位置(ProgressBar) ProgressBar 支持通过 `PercentPosition` 精确控制百分比标签位置: ```csharp // ViewModel 中定义不同位置 public PercentPosition InnerStartPercentPosition { get; } = new() { IsInner = true, Alignment = LinePercentAlignment.Start }; public PercentPosition InnerCenterPercentPosition { get; } = new() { IsInner = true, Alignment = LinePercentAlignment.Center }; public PercentPosition InnerEndPercentPosition { get; } = new() { IsInner = true, Alignment = LinePercentAlignment.End }; public PercentPosition OuterStartPercentPosition { get; } = new() { IsInner = false, Alignment = LinePercentAlignment.Start }; public PercentPosition OuterCenterPercentPosition { get; } = new() { IsInner = false, Alignment = LinePercentAlignment.Center }; ``` ```xml ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/ProgressBarShowCase.axaml` 中 "Change progress value position" 示例。 --- ## 5. 通过 Style 覆盖样式 ```xml ``` --- ## 6. 动态交互示例 ```xml Sub Add ``` ```csharp public class ProgressBarViewModel : ReactiveObject { [Reactive] public double ProgressValue { get; set; } = 50; public ReactiveCommand AddProgressValue { get; } public ReactiveCommand SubProgressValue { get; } public ProgressBarViewModel() { AddProgressValue = ReactiveCommand.Create(() => { ProgressValue = Math.Min(100, ProgressValue + 10); }); SubProgressValue = ReactiveCommand.Create(() => { ProgressValue = Math.Max(0, ProgressValue - 10); }); } } ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/Feedback/ProgressBarShowCase.axaml` 中 "Dynamic" 示例。 --- ## 样式选择器速查 ### 按控件类型选择 | 选择器 | 说明 | |---|---| | `atom\|ProgressBar` | 匹配所有线形进度条 | | `atom\|CircleProgress` | 匹配所有圆形进度条 | | `atom\|DashboardProgress` | 匹配所有仪表盘进度条 | | `atom\|StepsProgressBar` | 匹配所有步骤进度条 | ### 按状态选择 | 选择器 | 说明 | |---|---| | `atom\|ProgressBar[Status=Normal]` | Normal 状态的线形进度条 | | `atom\|ProgressBar[Status=Exception]` | 异常状态的线形进度条 | | `atom\|ProgressBar[Status=Active]` | 活跃状态的线形进度条 | | `atom\|CircleProgress[Status=Exception]` | 异常状态的圆形进度条 | ### 按尺寸选择 | 选择器 | 说明 | |---|---| | `atom\|ProgressBar[SizeType=Large]` | 大号线形进度条 | | `atom\|ProgressBar[SizeType=Small]` | 小号线形进度条 | | `atom\|CircleProgress[SizeType=Middle]` | 中号圆形进度条 | ### 按伪类选择 | 选择器 | 说明 | |---|---| | `atom\|ProgressBar:completed` | 已完成的进度条(Value == Maximum) | | `atom\|ProgressBar:indeterminate` | 不定态进度条 | | `atom\|ProgressBar:horizontal` | 水平方向进度条 | | `atom\|ProgressBar:vertical` | 垂直方向进度条 | | `atom\|ProgressBar:labelinner` | 百分比标签在内部的进度条 | | `atom\|ProgressBar:disabled` | 禁用状态 | ### 组合选择器示例 | 选择器 | 说明 | |---|---| | `atom\|ProgressBar[Status=Exception]:completed` | 异常但已完成的进度条 | | `atom\|ProgressBar:vertical[SizeType=Small]` | 垂直方向小号进度条 | | `atom\|StepsProgressBar:horizontal[SizeType=Large]` | 水平方向大号步骤进度条 |