WPF 4 开发Windows 7 任务栏(Overlay Icon、Thumbnail Toolbar、Progress Bar)
在上一篇我们介绍了如何在WPF 4 中开发Windows 7 跳转列表,本篇将继续针对WPF 4 中任务栏其他功能:覆盖图标(Overlay Icon)、进度条(Progress Bar)、缩略图工具栏(Thumbnail Toolbar)进行研究。对于这些功能的API 开发可参考《Windows 7 任务栏开发系列汇总》。
TaskbarItemInfo
在System.Windows.Shell 命名空间中,TaskbarItemInfo 类包含的上述所有Windows 7 任务栏开发功能,通过它我们可以自定义软件任务栏的各种功能,其类成员可参考:TaskbarItemInfo Members。
ThumbButtonInfo
同样在System.Windows.Shell 命名空间中,ThumbButtonInfo 类为我们提供了开发缩略图工具栏的功能,其类成员可参考:ThumbButtonInfo Members,使用方式在下文中将会介绍。
覆盖图标(Overlay Icon)
通过API 开发Overlay Icon 时,需要简单调用SetOverlayIcon 方法即可。在WPF 4 中开发仍然很简单,只需在XAML 中为TaskbarItemInfo 类的Overlay 属性赋上Icon 值便可实现,如下代码所示:
<Window.TaskbarItemInfo><TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico"Description="Taskbar Items Sample"></TaskbarItemInfo> </Window.TaskbarItemInfo>
这样就在程序图标上增加了一个“问号图标”:
缩略图工具栏(Thumbnail Toolbar)
下面我们为程序增添一个缩略图工具栏,向其中加入盾牌按键(Safe.ico),点击后便更换掉上图的“问号图标”。首先在前面代码的基础上增加ThumbButtonInfo 内容为工具栏装载按键:
<Window.TaskbarItemInfo><TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico"Description="Taskbar Items Sample"><TaskbarItemInfo.ThumbButtonInfos><ThumbButtonInfo x:Name="changeIcon"DismissWhenClicked="True" Click="changeIcon_Click"Description="Change overlay icon"ImageSource="Resources/Safe.ico"/></TaskbarItemInfo.ThumbButtonInfos></TaskbarItemInfo> </Window.TaskbarItemInfo>
在代码中DismissWhenClicked 的作用是决定点击按键后缩略图窗口是否关闭(默认为False);Description 为按键描述;ImageSource 为按键图标;Click 点击时会触发相应事件。下面代码即为点击后触发的changeIcon_Click 事件:
private ImageSource IconToBitmapSource(Icon img) {Bitmap bitmap = img.ToBitmap();IntPtr hBitmap = bitmap.GetHbitmap();ImageSource bitmapSource =Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());return bitmapSource; }private void changeIcon_Click(object sender, EventArgs e) {taskBar.Overlay = IconToBitmapSource(Win7TaskbarDemo.Properties.Resources.Safe); }
代码中IconToBitmapSource 是将System.Drawing.Icon 转换为System.Windows.Media.ImageSource 的函数,可将程序中的Icon 图片转化为ImageSource 赋值给Overlay 使用。如果想取消Overlay 图标,就将taskBar.Overlay 设为null。可见对于Overlay 的替换也是十分简便的。
运行效果 点击后效果
进度条(Progress Bar)
在WPF 4 中任务栏进度条状态仍然是五种(如下表所示)。为了改变任务栏进度条状态,我们再往缩略图工具栏中加入一个按键,使其在点击时改变进度条颜色。
<Window.TaskbarItemInfo><TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico"Description="Taskbar Items Sample"><TaskbarItemInfo.ThumbButtonInfos><ThumbButtonInfoCollection><ThumbButtonInfo x:Name="changeIcon"DismissWhenClicked="True"Click="changeIcon_Click"Description="Change overlay icon"ImageSource="Resources/Safe.ico"/><ThumbButtonInfo x:Name="progressState"DismissWhenClicked="False"Click="progressState_Click"Description="Change progress state"ImageSource="Resources/Error.ico"/></ThumbButtonInfoCollection></TaskbarItemInfo.ThumbButtonInfos></TaskbarItemInfo> </Window.TaskbarItemInfo>
为progressState_Click 事件增加一些内容,通过ProgressState 调整进度栏状态;用ProgressValue 设置进度值:
private void progressState_Click(object sender, EventArgs e) {taskBar.ProgressState = TaskbarItemProgressState.Error;taskBar.ProgressValue = 0.4; }
点击前后的对比图:
缩略图调整
在新WPF 4 中我们可以通过TaskbarItemInfo 的ThumbnailClipMargin 属性来调整程序窗口在缩略图中显示的内容。如下图所示,默认情况下缩略图会显示程序窗口全貌。下面通过在XAML 中设置ThumbnailClipMargin 值使缩略图只显示“Reset”按键部分。
<Window.TaskbarItemInfo><TaskbarItemInfo x:Name="taskBar"ThumbnailClipMargin="120,90,120,40"Overlay="Resources/Question.ico"Description="Taskbar Items Sample" /> </Window.TaskbarItemInfo>
效果图:
至此,在WPF 4 中开发Windows 7 任务栏的内容就介绍完了,后续将会介绍一些WPF 4 的其他新功能,敬请关注!下周的这个时候VS2010 就正式发布了,到时大家也可以亲身的体验一下~
参考资料
1. Windows 7 任务栏开发系列汇总
http://www.cnblogs.com/gnielee/archive/2010/03/21/1691101.html
2. TaskbarItemInfo Class
http://msdn.microsoft.com/en-us/library/dd783827(v=VS.100).aspx
3. ThumbButtonInfo Class
http://msdn.microsoft.com/en-us/library/dd783604(v=VS.100).aspx
源代码下载
Win7TaskbarDemo.VS2010.zip
WPF 4 开发Windows 7 任务栏(Overlay Icon、Thumbnail Toolbar、Progress Bar)相关推荐
- WPF 4 开发Windows 7 跳转列表(JumpList)
原文:WPF 4 开发Windows 7 跳转列表(JumpList) 在之前写过的<Windows 7 任务栏开发系列>中我们通过Visual Studio 2008 借助微软提供的Wi ...
- WPF 4 动态覆盖图标(Dynamic Overlay Icon)
在<WPF 4 开发Windows 7 任务栏>一文中我们学习了任务栏的相关开发内容,同时也对覆盖图标(Overlay Icon)功能进行了一些介绍,其中覆盖图标是以静态方式呈现的.本篇将 ...
- Windows 7 任务栏开发 之 进度条(Progress Bar)
上一篇我们完成了"覆盖图标"(Overlay Icon)的相关开发,本篇我们将对进度条特性进行研究.在使用IE 下载文件时,任务栏图标会同步显示当前下载进度(如下图).那么在应用程 ...
- C# Windows 7任务栏开发之进度条(Progress Bar)
Windows 7 任务栏为我们增添了许多其他功能:Jump Lists,Window Preview,Progress Bar,Overlay Icon 等等. 新任务栏的功能使我们的操作更加方便快 ...
- Windows 7程序开发系列之一(任务栏篇)
Windows 7 引入了很多新特性,其中最直观的莫过于用户界面上的变化.很多人也因为不能适应这种变化而回到了XP.但是在我看来这些新的特性却是一种进步,使用了一段时间之后,也萌生了要做一点开发的冲动 ...
- .net core 开发 Windows Forms 程序
我是一名 ASP.NET 程序员,专注于 B/S 项目开发.累计文章阅读量超过一千万,我的博客主页地址:https://www.itsvse.com/blog_xzz.html 引言 .net cor ...
- 基于WPF的开发的知识点
基于WPF的开发 一.XAML 语言 XAML被编译为BAML(Binary Application Markup Language)文件.通常,BAML文件比XAML更小,编译后的BAML都是Pre ...
- WPF Multi-Touch 开发:高级触屏操作(Manipulation)
在上一篇中我们对基础触控操作有了初步了解,本篇将继续介绍触碰控制的高级操作(Manipulation),在高级操作中包含了一些特殊的触屏手势:平移.缩放.旋转,当然在WPF 中无需自行开发这些手势,只 ...
- WPF Multi-Touch 开发:惯性效果(Inertia)
从上一篇实例可以发现在图片移动过程中如果将手指移开屏幕则图片会立刻停止,根据这种情况WPF 提供另外一种惯性效果(Inertia).通过它可以使UI 单元移动的更加符合物理特性.更为实际和流畅. 在前 ...
最新文章
- 天天Linux-Ctrl+S快捷键锁定屏幕的问题
- 【代码实战】基于pytorch实现中文文本分类任务
- 详解Linux交互式shell脚本中创建对话框实例教程
- 转载 SharedPreference.Editor的apply和commit方法异同
- oracle-sql汇总
- MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明
- Struts2的标签概述
- Android设计原则及规范指南!UI设计师值得一看!
- TokenInsight:BTC现货交易量环比上周大幅上升,人气指数小幅回落
- 分享一个开源的项目,数据结构和算法必知必会的50个代码实现
- 计算机主板提示ahci,映泰主板设置硬盘模式AHCI或IDE的教程
- 于娟的忠告----生命只有一次,活着才是王道啊
- CSS3实战-文字篇
- 随机森林(RandomForest,RF)网格搜索法调参
- 电脑系统怎么重装?保姆级Windows 8系统安装教程
- iOS XCode无线连接iPhone手机 (Pair a wireless device)
- 在与SQL Server建立连接时出现与网络相关的或特定于实例的错误
- Make WeChat Great Again
- umi_tools使用
- 19.C语言求圆周率