使用WPF窗口作为弹出层
前几天领导让我在WPF的查询页面添加一个弹出层,防止用户查询大量数据时疯狂点击查询按钮或其他地方,我想了想最后决定用一个新的窗口做弹出层,WPF上面的控件都是使用 “Material Design In XAML Toolkit” 做的。
我自己做的弹出层非常简单,就是一个窗体上放了一个会转的半圆和一个Label控件
但是运行时发现不太正常,点击主窗口时,弹出层会被主窗口覆盖在下面
然后设置了属性
//loadingWindow是弹出窗口的名称
loadingWindow.Owner = this;
设置完成后,发现弹出窗口有白色的背景色
然后设置了Windows窗体属性:
Background="#00000000"
最终效果:
最后,上代码
在 主窗体 中添加弹出层对象:
public partial class MainWindow : Window
{
private LoadingWindow loadingWindow = new LoadingWindow();//创建对象
public MainWindow()
{
}
}
主窗体 打开弹出层代码:
private void StartLoading()
{
loadingWindow.Owner = this;//设置弹出层在主窗体上方
loadingWindow.Show();//打开弹出层
IsEnabled = false;//设置主窗体不可用
}
主窗体 关闭弹出层代码:
private void StopLoading()
{
loadingWindow.Hide();//弹出层隐藏(如果直接Close的话,只能打开弹出层一次)
IsEnabled = true;//主窗体可用
}
主窗体 使用弹出层(样例):
private void btn_SearchinReciveGoods_Click(object sender, RoutedEventArgs e)
{
StartLoading();//打开弹出层
try
{
using (SqlConnection con = new SqlConnection(conStr))
{
#region 查询、绑定数据到控件
string sqlCmd = "SELECT * FROM Table";
using (SqlDataAdapter sda = new SqlDataAdapter(sqlCmd, con))
{
DataSet ds = new DataSet();
_ = sda.Fill(ds);
dg_ReciveGood.DataContext = ds.Tables[0];
}
#endregion
StopLoading();//绑定完成后,关闭弹出层
}
}
catch (Exception)
{
StopLoading();//数据查询失败或其他原因导致异常时,关闭弹出层
throw;
}
}
弹出层 XAML代码(使用了"Material Design In XAML Toolkit" 控件)
<Window x:Class="IG_SIMS_PAD.LoadingWindow"
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:IG_SIMS_PAD"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
Title="LoadingWindow" Height="200" Width="250" WindowStyle="None" WindowStartupLocation="CenterScreen" Background="#00000000" Foreground="{x:Null}" AllowsTransparency="True">
<Grid>
<materialDesign:Card UniformCornerRadius="14" Padding="4" Margin="35,25,35,35">
<ProgressBar Style="{StaticResource MaterialDesignCircularProgressBar}" Value="50" IsIndeterminate="True" Height="Auto" Margin="67,21,67,71" Width="Auto" />
</materialDesign:Card>
<Label Content="loading..." VerticalAlignment="Top" RenderTransformOrigin="0.148,0.504" Margin="77,108,77,0" FontSize="20" Height="34"/>
</Grid>
</Window>