一、控件介绍

在 WPF 中使用的等待控件,控件包括三种,普通的等待信息提示(WaitTip),进度条提示(WaitProgress),以及主程序覆盖的模拟时钟等待窗口(WaitClock),具体效果看下面的图示。

  • 支持自定义等待信息
  • 支持在异步线程中设置进度或者关闭等待窗口
  • 支持覆盖某个 UIElementCollection,或者覆盖当前主程序或者某个 Window

二、图示效果

三、细节说明

  1. 覆盖某个 UIElementCollection,是在 UIElementCollection 中添加等待控件之后,等待控件的背景面板覆盖住 UIElementCollection,达到用户无法操作 UIElementCollection 的效果,同时又不影响 UIElementCollection 之外的其他控件。
  2. 覆盖主程序或者某个 Window,是将等待控件放置于一个子 Window 中,并设置该子 Window 的如下属性:
    • WindowStyle = WindowStyle.None
    • Background = new SolidColorBrush(Colors.Transparent) (设置背景为透明色,配合下一条使用)
    • AllowsTransparency = true (允许透明色)
    • Owner = parentWindow (设置依附的父窗口)
    • WindowStartupLocation = WindowStartupLocation.CenterOwner (位于父窗口中央)
    • SizeToContent = SizeToContent.WidthAndHeight (保证 Window 跟随内部的内容大小)
    • ShowInTaskbar = false (不在任务栏显示该窗口)
    • Content = this(等待控件)

最后在异步线程启动之后,调用该子 Window 的 ShowDialog 方法即可。

需要注意的是,如果在异步线程启动之前,调用了子 Window 的 ShowDialog 方法,则是无法在异步线程中关闭等待控件,即子 Window。如下代码所示:

private void btnWaitTipTest2_Click(object sender, RoutedEventArgs e)
{
WaitTip waitTip = new WaitTip(this);
Thread t = new Thread(new ThreadStart((Action)delegate
{
try
{
for (int i = 0; i <= 5; i++)
{
Thread.Sleep(1000);
}
waitTip.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}));
t.Start();
waitTip.Show("WaitTip Control Test2");
}

上面代码最后两行,如果互换位置,依旧可以显示等待控件,但是子线程就不会运行,也就不会关闭等待控件了,因为 Window 的 ShowDialog 方法会占住主线程,除非关闭,否则后面的代码无法运行。

  1. WaitProgress 支持设置 IsIndeterminate 属性,即是显示实际值,还是显示一般的连续进度反馈。以及进度到达 100%后是否自动关闭进度条。
  2. WaitClock 主要是通过 Path 绘制时针、分针和秒针,然后在 DispatcherTimer 的 Tick 事件中不断更新三针的角度即可,当然要设置好三针的旋转中心,详细内容可参考代码。
  3. 最后,在异步线程中操作 UI 元素,采用了下面简单的处理:
UI.Dispatcher.BeginInvoke((Action)delegate (){
// 操作 UI 代码
});

四、资源下载

dll+源工程以及Demo工程下载:http://files.cnblogs.com/files/memento/WaitControl.7z

[WPF] Wait for a moment.的更多相关文章

  1. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  2. MVVM框架从WPF移植到UWP遇到的问题和解决方法

    MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...

  3. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  4. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  5. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  6. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  7. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  8. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  9. 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

    常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...

  10. WPF 微信 MVVM

    公司的同事离职了,接下来的日子可能会忙碌,能完善DEMO的时间也会少了,因此,把做的简易DEMO整体先记录一下,等后续不断的完善. 参考两位大神的日志:WEB版微信协议部分功能分析.[完全开源]微信客 ...

随机推荐

  1. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  2. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  3. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  4. 挑子学习笔记:特征选择——基于假设检验的Filter方法

    转载请标明出处: http://www.cnblogs.com/tiaozistudy/p/hypothesis_testing_based_feature_selection.html Filter ...

  5. SDWebImage源码解读 之 UIImage+GIF

    第二篇 前言 本篇是和GIF相关的一个UIImage的分类.主要提供了三个方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name ----- 根据名 ...

  6. H5项目开发分享——用Canvas合成文字

    以前曾用Canvas合成.裁剪.图片等<用H5中的Canvas等技术制作海报>.这次用Canvas来画文字. 下图中"老王考到驾照后"这几个字是画在Canvas上的,与 ...

  7. .Net Core上也可以使用的二维码组件

    我Fork了QRCoder,并且兼容了.Net Core,图形库用的是ZKWeb.System.Drawing Github: https://github.com/zkweb-framework/Q ...

  8. ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑

    原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...

  9. 以向VS 程序打包集成自动写入注册表功能为例,介绍如何实现自由控制安装过程

    最近由于项目部署时需要更灵活的控制程序安装的流程以及自定义安装行为,特意研究了一下VS程序打包,把解决办法和大家分享一下. 以VS2010为例: 这是一个已经设置好最基本的Visual Studio ...

  10. 【iOS】Xcode8+Swift3 纯代码模式实现 UICollectionView

    开发环境 macOS Sierra 10.12.Xcode 8.0,如下图所示: 总体思路 1.建立空白的storyboard用于呈现列表 2.实现自定义单个单元格(继承自:UICollectionV ...