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;
        }
    }
}
相关推荐
bugcome_com1 天前
C# 进阶核心知识点汇总|多项目开发 + 委托 + Lambda + 事件一次吃透
c#
SunflowerCoder1 天前
基于插件化 + Scriban 模板引擎的高效 HTTP 协议中心设计
http·c#
就是有点傻1 天前
WPF按钮走马灯效果
wpf
zuozewei1 天前
虚拟电厂聚合商平台安全技术体系深度解读
安全·wpf
极客智造1 天前
WPF 自定义控件:AutoGrid 实现灵活自动布局的网格控件
wpf
极客智造1 天前
WPF Grid 布局高效扩展:GridHelpers 附加属性工具类全解析
wpf
张人玉1 天前
WPF 多语言实现完整笔记(.NET 4.7.2)
笔记·.net·wpf·多语言实现·多语言适配
青云计划1 天前
知光项目用户关系模块
c#·linq
m5655bj1 天前
使用 C# 修改 PDF 页面尺寸
java·pdf·c#
专注VB编程开发20年1 天前
c#模仿内置 Socket.Receive(无需 out/ref,直接写回数据)
开发语言·c#