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属性始终在MinimumMaximum范围内,否则会引发异常
  2. 使用数据绑定时实现INotifyPropertyChanged接口确保UI更新
  3. 复杂样式建议放在资源字典中复用
  4. 不确定模式(IsIndeterminate)与确定模式互斥
  5. 高精度进度建议使用double类型而非int
相关推荐
咋吃都不胖lyh1 小时前
LangGraph标准构建示例
开发语言·python
Jun6261 小时前
QT(1)-C/C++库生成和调用
c语言·开发语言·c++·qt
Jun6261 小时前
QT(10)-TCP数据收发
开发语言·qt·tcp/ip
*neverGiveUp*2 小时前
Python基础语法
开发语言·python
努力努力再努力wz2 小时前
【Qt入门系列】一文掌握 Qt 常用显示类控件:QLCDNumber、QProgressBar 与 QCalendarWidget
c语言·开发语言·数据结构·数据库·c++·git·qt
右耳朵猫AI2 小时前
JS/TS周刊2026W21 | Deno2.8RC、Angular22RC、TypeORM1.0
开发语言·javascript·ecmascript
闪电悠米2 小时前
黑马点评-秒杀优化-02_lua_precheck
开发语言·redis·分布式·缓存·junit·wpf·lua
盈建云系统2 小时前
外贸网站SEO怎么做?从产品关键词到询盘页面,独立站内容优化流程和费用参考
开发语言·网站搭建
Dream_ksw2 小时前
Python多继承之super()继承问题解决
开发语言·python