WPF:使用【Arc】制作环形加载动画和环形进度条

13 篇文章 2 订阅
本文介绍了如何在WPF中利用Blend包创建环形加载等待动画和环形进度条。通过NuGet包管理器安装Blend包,然后在XAML中引入相关命名空间,并设置Arc元素的属性来实现动画效果。此外,还展示了如何通过后台代码动态更新进度,创建环形进度条。
摘要由CSDN通过智能技术生成

安装Blend包

首先引入Blend包,【工具】-【NuGet包管理器】-【管理解决方案的NuGet程序包】,在【浏览】页面搜索关键词【Blend】,安装
在这里插入图片描述

引入Blend包

MainWindow.xamlWindow标签里引入

xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"

环形加载等待动画

<ed:Arc Width="300"
        Height="300"
        StartAngle="0" 
        EndAngle="90"
        Stretch="None"
        ArcThickness="10"
        Fill="Black">
    <ed:Arc.Effect>
        <DropShadowEffect Color="Black" BlurRadius="10" Opacity="0.8"/>
    </ed:Arc.Effect>
</ed:Arc>                

StartAngleEndAngle设置环形的起始结束位置,最大为360。超过360相对于绕回一圈,例如420和60是一样的。
ArcThickness环形的粗细
Fill环形颜色
Stretch不拉伸

然后为其添加旋转动画,只需要一直改变StartAngleEndAngle的值就行

<ed:Arc.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard>
            <Storyboard RepeatBehavior="Forever">
                <DoubleAnimation Storyboard.TargetProperty="StartAngle" To="360" BeginTime="0:0:0" Duration="0:0:2"/>
                <DoubleAnimation Storyboard.TargetProperty="EndAngle" To="360" BeginTime="0:0:0" Duration="0:0:1.5"/>
                <DoubleAnimation Storyboard.TargetProperty="EndAngle" To="450" BeginTime="0:0:1.5" Duration="0:0:0.5"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ed:Arc.Triggers>
效果

在这里插入图片描述

环形进度条

<Grid>
    <ed:Arc Width="300"
            Height="300"
            StartAngle="0" 
            EndAngle="360"
            Stretch="None"
            ArcThickness="30"
            Fill="#0A000000"/>
    <ed:Arc Name="arcProgress"
            Width="300"
            Height="300"
            StartAngle="0" 
            EndAngle="0"
            Stretch="None"
            ArcThickness="30"
            Fill="#AA000000"/>
    <TextBlock Name="txtBlockProgress"
               HorizontalAlignment="Center"
               VerticalAlignment="Center"
               Text="0%"
               FontSize="50"/>
</Grid>
<Button Content="开始" Width="100" Height="50" Click="Button_Click"/>

添加两个Arc,一个用作背景,一个用于显示进度。一个TextBlock显示数字。

private Thread ProgressThread;
private void Button_Click(object sender, RoutedEventArgs e)
{
    if (ProgressThread != null && ProgressThread.IsAlive) return;
    ProgressThread = new Thread(() =>
    {
        double endAngle = 0;
        while (true)
        {
            if(endAngle >= 360)
            {
                break;
            }
            endAngle += 1;
            Application.Current.Dispatcher.Invoke(() =>
            {
                arcProgress.EndAngle = endAngle;
                txtBlockProgress.Text = $"{(endAngle * 100 / 360).ToString("F1")}%";
            });
            Thread.Sleep((int)endAngle / 10);
        }
    });
    ProgressThread.Start();
}
效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值