
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;
}
}
}