wpf 动态转圈等待提示框

csharp 复制代码
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        AllowDrop="True"
        mc:Ignorable="d"
        Title="Dynamic Rectangles" Height="800" Width="800">

    <Grid>
        <!-- 主界面内容 -->
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Button Content="显示等待提示" 
                    Width="120" 
                    Height="40" 
                    FontSize="16"
                    Click="ShowLoadingButton_Click"/>

            <Button Content="隐藏等待提示" 
                    Width="120" 
                    Height="40" 
                    FontSize="16"
                    Margin="0,20,0,0"
                    Click="HideLoadingButton_Click"/>
        </StackPanel>

        <!-- 等待提示层 -->
        <Grid x:Name="LoadingOverlay" 
              Background="#80000000" 
              Panel.ZIndex="999" 
              Visibility="Collapsed">
            <Border Background="White"
                    CornerRadius="10"
                    Width="120"  
                Height="120"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center">
                <StackPanel HorizontalAlignment="Center" 
                            VerticalAlignment="Center"
                            Orientation="Vertical">
                    <!-- 连续渐变色圆环动画 -->
                    <Grid Width="20" Height="20">
                        <!-- 半径缩小为1/4 -->
                        <!-- 连续渐变色圆环 -->
                        <Ellipse x:Name="SpinnerArc"
                                 StrokeThickness="3"
                                 RenderTransformOrigin="0.5,0.5">
                            <!-- 渐变色定义(连续彩虹色) -->
                            <Ellipse.Stroke>
                                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1" MappingMode="RelativeToBoundingBox">
                                    <GradientStop Color="#FF3A7DFF" Offset="0.0"/>
                                    <GradientStop Color="#00C9FF" Offset="0.2"/>
                                    <GradientStop Color="#00FFA3" Offset="0.4"/>
                                    <GradientStop Color="#F6FF00" Offset="0.6"/>
                                    <GradientStop Color="#FF7D00" Offset="0.8"/>
                                    <GradientStop Color="#FF0062" Offset="1.0"/>
                                </LinearGradientBrush>
                            </Ellipse.Stroke>
                            <Ellipse.RenderTransform>
                                <RotateTransform Angle="0"/>
                            </Ellipse.RenderTransform>
                            <Ellipse.Triggers>
                                <EventTrigger RoutedEvent="Loaded">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation 
                                                Storyboard.TargetName="SpinnerArc"
                                                Storyboard.TargetProperty="(Ellipse.RenderTransform).(RotateTransform.Angle)"
                                                From="0" To="360" Duration="0:0:1" 
                                                RepeatBehavior="Forever"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                            </Ellipse.Triggers>
                        </Ellipse>
                    </Grid>

                    <!-- 提示文字 -->
                    <TextBlock Text="处理中..."
                               Margin="0,10,0,0"
                               FontSize="12"
                               HorizontalAlignment="Center"
                               Foreground="#333333"/>
                </StackPanel>
            </Border>
        </Grid>
    </Grid>
</Window>
csharp 复制代码
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
using static System.Net.Mime.MediaTypeNames;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ShowLoadingButton_Click(object sender, RoutedEventArgs e)
        {
            ShowLoading();

            // 模拟耗时操作
            Task.Delay(3000).ContinueWith(_ =>
            {
                Dispatcher.Invoke(() => HideLoading());
            });
        }

        private void HideLoadingButton_Click(object sender, RoutedEventArgs e)
        {
            HideLoading();
        }

        public void ShowLoading()
        {
            LoadingOverlay.Visibility = Visibility.Visible;
        }

        public void HideLoading()
        {
            LoadingOverlay.Visibility = Visibility.Collapsed;
        }
    }
}
相关推荐
我是唐青枫10 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
unicrom_深圳市由你创科技11 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
昵称暂无111 小时前
.NET 高级开发 | i18n 原理、实现一个 i18n 框架
javascript·c#·.net
疯狂成瘾者12 小时前
Chroma向量数据库
开发语言·数据库·c#
我是唐青枫12 小时前
C#.NET Monitor 与 Mutex 深入解析:进程内同步、跨进程互斥与使用边界
开发语言·c#·.net
ou.cs12 小时前
c# 信号量和锁的区别
开发语言·c#
yugi98783812 小时前
C# 串口下载烧写BIN文件工具
开发语言·c#
"菠萝"14 小时前
C#知识学习-021(文字关键字)
开发语言·学习·c#
游乐码14 小时前
c#HashTable
开发语言·c#
游乐码14 小时前
C#Queue
数据结构·游戏·c#