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;
        }
    }
}
相关推荐
dotent·12 小时前
C#基于WPF UI框架的通用基础上位机测试WPF框架
ui·c#·wpf
合作小小程序员小小店12 小时前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
合作小小程序员小小店14 小时前
桌面开发,在线%超市销售管理%系统,基于vs2022,c#,winform,sql server数据
开发语言·数据库·microsoft·c#
p***323515 小时前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
2501_9418072617 小时前
Java高性能消息队列与Kafka实战分享:大规模消息处理、异步通信与性能优化经验
c#·linq
周杰伦fans18 小时前
C# 中的**享元工厂**模式
开发语言·数据库·c#
鹿衔`18 小时前
通过Flink 1.19 客户端实现Flink集群连接 Kafka 基础测试报告
c#·linq
玩泥巴的20 小时前
.NET 8+ 飞书API实战:自动化群组管理与消息推送
c#·.net·二次开发·飞书
烛阴20 小时前
从`new`关键字开始:精通C#类与对象
前端·c#