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;
        }
    }
}
相关推荐
懒人Ethan19 小时前
解决一个C# 在Framework 4.5反序列化的问题
java·前端·c#
mysolisoft20 小时前
Avalonia+ReactiveUI实现记录自动更新
c#·avalonia·reactiveui·sourcegenerator
心疼你的一切21 小时前
使用Unity引擎开发Rokid主机应用的模型交互操作
游戏·ui·unity·c#·游戏引擎·交互
韩立学长1 天前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
玩泥巴的1 天前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作
心疼你的一切1 天前
使用Unity引擎开发Rokid主机应用的全面配置交互操作
学习·游戏·unity·c#·游戏引擎·交互
椒颜皮皮虾྅1 天前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
kalvin_y_liu2 天前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
椒颜皮皮虾2 天前
基于DeploySharp 的深度学习模型部署测试平台:支持YOLO全系列模型
c#
李宥小哥3 天前
C#基础10-结构体和枚举
java·开发语言·c#