需求:打开WPF项目后,展示3秒钟产品Logo后,进入主界面MainWindow。(类似于安卓应用打开时的闪屏页SplashPage)

思路:在进入MainWindow后新建一个Window窗体,窗体的背景设置为Logo图片,窗体设置为最大化、Z轴置顶、不可调整宽高、不显示状态栏。设置一个DispatcherTimer定时器,3秒后关闭窗体。

MainWindow.xaml.cs 后台代码的主要逻辑:

private Window window;

public MainWindow()
{
InitializeComponent();
// 界面加载完成后触发的事件
this.Loaded += new RoutedEventHandler(ShowLoginWindow);
} private void ShowLoginWindow(object sender, RoutedEventArgs e)
{
// 弹窗显示Logo 3秒后关闭该弹窗自动关闭
window = new Window(); // 经测试,以下设置无法做到窗体跟屏幕一样大,窗体四周会留下几个像素的边距
//double screenHeight = SystemParameters.FullPrimaryScreenHeight;
//double screenWidth = SystemParameters.FullPrimaryScreenWidth;
//window.Width = screenWidth;
//window.Height = screenHeight;
//window.Top = (screenHeight - window.Height) / 2;
//window.Left = (screenWidth - window.Width) / 2; window.Topmost = true; // 置顶
window.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 屏幕中心
window.WindowState = WindowState.Maximized; // 最大化
window.ResizeMode = ResizeMode.NoResize; // 不能调宽高
window.WindowStyle = WindowStyle.None; // 无窗体样式,即可不显示状态栏 // 背景是Logo图片
ImageBrush brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri("pack://application:,,,/HomeDecorationPSD;component/Presentation/Resources/Images/app_logo.jpg")); // 这是绝对路径
window.Background = brush; // 设置窗体3秒后自动关闭
StartCloseTimer(); window.ShowDialog();
} private void StartCloseTimer()
{
DispatcherTimer timer = new DispatcherTimer();
//timer.Interval = TimeSpan.FromSeconds(3); // 3秒
// 为了方便测试,可以把这个秒数写到App.config配置文件中
double t = double.Parse(ConfigurationManager.AppSettings["LOGO_WINDOW_AUTO_CLOSE_TIMER"]);
timer.Tick += TimerTick; // 注册计时器到点后触发的回调
timer.Start();
} private void TimerTick(object sender, EventArgs e)
{
DispatcherTimer timer = (DispatcherTimer)sender;
timer.Stop();
timer.Tick -= TimerTick; // 取消注册
window.Close();
} private void CloseLogoWindow(object state)
{
// 关闭Logo窗体
window.Close();
}

配置文件App.config 添加内容

<appSettings>
...
<!-- 打开软件时Logo弹窗自动关闭倒计时秒数 类似闪屏页SplashPage -->
<add key="LOGO_WINDOW_AUTO_CLOSE_TIMER" value="3" />
</appSettings>

重要参考:

http://stackoverflow.com/questions/11719283/how-to-close-auto-hide-wpf-window-after-10-sec-using-timer

【C#/WPF】窗体定时自动关闭的更多相关文章

  1. 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二

    一张图搞定OAuth2.0   目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...

  2. WinForm 与WPF 窗体之间的想到调用

    先放置一个容器控件,并设计 好WinForm(或WPF)窗口 winform 调用 wpf ElementHost el = new ElementHost(); el.Dock = DockStyl ...

  3. 关于WinForm引用WPF窗体---在Winform窗体中使用WPF控件

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  4. 关于WinForm引用WPF窗体

    项目中有个界面展示用WPF实现起来比较简单,并且能提供更酷炫的效果,但是在WinForm中使用WPF窗体出现了问题,在网上找了一下有些人说Winform不能引用WPF的窗体,我就很纳闷,Win32都能 ...

  5. WPF窗体视图中绑定Resources文件中字符串时,抛出:System.Windows.Markup.StaticExtension

    问题描述: 在Resources.resx定义了一个静态字符串字段Title,并在WPF窗体视图中绑定为窗体的标题: Title="{x:Static local:Resources.Tit ...

  6. WPF窗体禁用最大化按钮

    禁用WPF窗体的最大化按钮可以使用Windows API改变按钮状态的方法实现.使用GetWindowLong可以得到当前按钮的状态.使用SetWindowLong可以设置按钮的状态.使用SetWin ...

  7. WPF自学入门(八)WPF窗体之间的交互

    今天我们一起来看一下WPF窗体之间的交互-窗体之间的传值.有两个窗体,一个是父窗体,一个是子窗体.要将父窗体的文本框中的值传递给子窗体中的控件.我们该怎么实现? 接下来我们一起来实现窗体之间的传值,在 ...

  8. 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上

    在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了. 我们可以简单的实例化一个WP ...

  9. WPF窗体の投影效果

    有时候我们需要给WPF窗体加上一个毛边(投影效果) 我们可以在窗体下加上如下代码 <Window.Effect> <DropShadowEffect BlurRadius=" ...

随机推荐

  1. Android WiFi开发

    概述 介绍Android WiFi的扫描.连接.信息.以及WiFi热点等等的实现,并用代码实现. 详细 代码下载:http://www.demodashi.com/demo/10660.html 一. ...

  2. Mybatis中的@SelectKey注解

    一.创建Maven项目 在pom.xml中,添加mybatis依赖,mysql-jdbc依赖,把编译版本改为1.8 你问,为啥mybatis不会自动依赖mysql-jdbc,需要手动写明?答:因为my ...

  3. 【LeetCode】88. Merge Sorted Array (2 solutions)

    Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note ...

  4. linux 硬件设备文件名

  5. C++ main函数命令行参数使用

    1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv ...

  6. 在python中配置MySQL数据库

    MySQL数据库(1) 尽管用文件形式将数据保存到磁盘,已经是一种不错的方式.但是,人们还是发明了更具有格式化特点,并且写入和读取更快速便捷的东西——数据库(如果阅读港台的资料,它们称之为“资料库”) ...

  7. java从Object类型转换成double类型

    java从Object类型转换为double类型: Map<String,Object> map = new HashMap<String,Object>(); map.put ...

  8. 赶集mysql军规

    总是在灾难发生后,才想起容灾的重要性.总是在吃过亏后,才记得曾经有人提醒过. 一,核心军规 不在数据库做计算,cpu计算务必移至业务层 控制单表数据量,单表记录控制在千万级 控制列数量,字段数控制在2 ...

  9. 在centos7中用mariadb代替了mysql数据库吗

    从最新版本的linux系统开始(如 Centos7),默认的是 Mariadb而不是mysql!(mysql被闭源厂家收购,有闭源风险) 使用系统自带的repos安装很简单: yum install ...

  10. dubbo-monitor监控台的部署

    参考资料:dubbo的monitorhttps://github.com/handuyishe/dubbo-monitorhttp://blog.yangcvo.me/2017/01/26/Java- ...