安装Blend包
首先引入Blend
包,【工具】-【NuGet包管理器】-【管理解决方案的NuGet程序包】,在【浏览】页面搜索关键词【Blend】,安装
引入Blend包
在MainWindow.xaml
的Window
标签里引入
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>
StartAngle
和EndAngle
设置环形的起始结束位置,最大为360。超过360相对于绕回一圈,例如420和60是一样的。
ArcThickness
环形的粗细
Fill
环形颜色
Stretch
不拉伸
然后为其添加旋转动画,只需要一直改变StartAngle
和EndAngle
的值就行
<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();
}