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;
        }
    }
}
相关推荐
EIP低代码平台8 小时前
EIP 低代码平台 - 角色维护
低代码·c#·权限·工作流·netcore
心平气和量大福大13 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
-银雾鸢尾-17 小时前
C#中HashTable相关方法
开发语言·c#
geovindu21 小时前
CSharp: Flyweight Pattern
开发语言·后端·c#·.net·享元模式·结构型模式
吴可可12321 小时前
C# CAD二次开发中如何退出窗口
c#
影寂ldy21 小时前
C# WinForm 三种自定义控件 + 完全自定义重绘控件知识点
开发语言·c#
ellis197021 小时前
C#异常相关关键字:Exceptions,throw,try,catch,finally
unity·c#
-银雾鸢尾-21 小时前
C#中的Dictionary相关方法
开发语言·c#
listening77721 小时前
HarmonyOS 6.1 全场景协同实战:从“单机”到“超级终端”的分布式重构
wpf
lzhdim1 天前
C# 中读取CPU、硬盘和内存温度
开发语言·c#