记 一个 WPF 的 加载动画。
最近写界面的过程中需要弄个加载动画,但是又没找到想要的轮子,就差不多胡乱弄了一个,用到了HandyControl的Arc控件,别的也没啥了。RatioConverter是自己随便写的一个转换器,算一下Border的中心点的位置。
通过旋转最外层的Border和中间的Arc控件实现整个加载动画。
这个是效果图:
最后直接上代码:
<Border Grid.Column="0" Margin="-5" >
<hc:Arc Name="arc" Width="30" Height="30" StartAngle="180" EndAngle="180" Stretch="None" ArcThickness="2" Fill="{StaticResource SystemRunningColorBrush}" />
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="0" CenterX="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Border}, Path=ActualWidth,Converter={StaticResource RatioConverter}, ConverterParameter=0.5}" CenterY="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Border}, Path=ActualHeight,Converter={StaticResource RatioConverter}, ConverterParameter=0.5}" />
</TransformGroup>
</Border.RenderTransform>
<Border.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation FillBehavior="HoldEnd" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)" From="0" To="360" Duration="0:0:2.3" RepeatBehavior="Forever" />
<Storyboard RepeatBehavior="Forever" Storyboard.TargetName="arc" FillBehavior="HoldEnd">
<DoubleAnimation Storyboard.TargetProperty="EndAngle" To="540" BeginTime="0:0:0" Duration="0:0:3" FillBehavior="HoldEnd">
<DoubleAnimation.EasingFunction>
<PowerEase EasingMode="EaseInOut" Power="3"/>
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
<DoubleAnimation Storyboard.TargetProperty="EndAngle" To="180" BeginTime="0:0:2.8" Duration="0:0:2.3" FillBehavior="HoldEnd" />
</Storyboard>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Border.Triggers>
</Border>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗