C# AvaloniaUI ProgressBar用法

AvaloniaUI ProgressBar 基本样式和用法

在AvaloniaUI中使用ProgressBar控件时,可以通过以下代码定义基本样式和绑定数据:

csharp 复制代码
<ProgressBar 
    Minimum="0" 
    Maximum="100" 
    Value="{Binding ProgressValue}" 
    Width="200" 
    Height="20"/>

对应的ViewModel需要包含进度值属性:

csharp 复制代码
private double _progressValue;
public double ProgressValue
{
    get => _progressValue;
    set => this.RaiseAndSetIfChanged(ref _progressValue, value);
}

自定义进度条样式

通过Avalonia的样式系统可以修改进度条外观:

xml 复制代码
<Style Selector="ProgressBar">
    <Setter Property="Background" Value="#E0E0E0"/>
    <Setter Property="Foreground" Value="#0078D7"/>
    <Setter Property="Height" Value="10"/>
    <Setter Property="CornerRadius" Value="5"/>
</Style>

<Style Selector="ProgressBar:disabled">
    <Setter Property="Opacity" Value="0.6"/>
</Style>

动画效果实现

为进度变化添加平滑动画:

xml 复制代码
<Style Selector="ProgressBar">
    <Setter Property="Template">
        <ControlTemplate>
            <Border Background="{TemplateBinding Background}"
                    CornerRadius="{TemplateBinding CornerRadius}">
                <Rectangle Name="PART_Track"
                          Fill="{TemplateBinding Foreground}"
                          CornerRadius="{TemplateBinding CornerRadius}"
                          Width="{TemplateBinding Value, Converter={StaticResource PercentageConverter}}"/>
            </Border>
        </ControlTemplate>
    </Setter>
    <Style.Animations>
        <Animation Duration="0:0:0.3" Easing="Linear">
            <KeyFrame Cue="0%">
                <Setter Property="Opacity" Value="0.5"/>
            </KeyFrame>
            <KeyFrame Cue="100%">
                <Setter Property="Opacity" Value="1"/>
            </KeyFrame>
        </Animation>
    </Style.Animations>
</Style>

不确定状态进度条

处理未确定进度的场景:

xml 复制代码
<ProgressBar IsIndeterminate="True" 
             Width="200"
             Height="8">
    <ProgressBar.Styles>
        <Style Selector="ProgressBar:indeterminate">
            <Setter Property="Foreground" Value="#FF5722"/>
        </Style>
    </ProgressBar.Styles>
</ProgressBar>

进度文本显示

在进度条上叠加文本显示百分比:

xml 复制代码
<Grid Width="200" Height="24">
    <ProgressBar Value="{Binding ProgressValue}"
                 Minimum="0" 
                 Maximum="100"/>
    <TextBlock Text="{Binding ProgressValue, StringFormat={}{0}%}"
               HorizontalAlignment="Center"
               VerticalAlignment="Center"/>
</Grid>

垂直进度条实现

通过旋转实现垂直方向进度条:

xml 复制代码
<ProgressBar Width="20" 
             Height="100"
             Rotation="-90"
             HorizontalAlignment="Left"
             Value="{Binding ProgressValue}"/>

注意事项

  1. 确保Value属性始终在Minimum和Maximum范围内,否则会引发异常
  2. 使用数据绑定时实现INotifyPropertyChanged接口确保UI更新
  3. 复杂样式建议放在资源字典中复用
  4. 不确定模式(IsIndeterminate)与确定模式互斥
  5. 高精度进度建议使用double类型而非int
相关推荐
我是人✓2 分钟前
SpringMVC异常处理与拦截器实战揭秘
java·开发语言·后端
不是万能的豆学长12 分钟前
排查Go服务40天后的内存泄漏问题
开发语言·后端·golang·go
码匠许师傅15 分钟前
【C++三方组件】libpqxx:PostgreSQL 的 C++ 客户端
开发语言·c++·postgresql
chingho25 分钟前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目
H.莓飛25 分钟前
【C++】内存管理
linux·开发语言·jvm·c++·visual studio
tachibana229 分钟前
Go 语言 Map 的底层实现原理
开发语言·后端·golang·make
心仪久了会沦陷1 小时前
C语言数据结构入门——队列补充:循环队列的数组实现
c语言·开发语言·数据结构·笔记
源图客1 小时前
Python环境安装与PyCharm的第一个项目
开发语言·python·pycharm
zx_741484811 小时前
PyQt5 环境搭建保姆级教程:PyCharm + QtDesigner + PyUIC 完整配置
开发语言·qt·pycharm·pyqt
Soari1 小时前
交换机转发模式
开发语言·网络·php