这个程序模彷了Windows7的桌面任务栏,当在桌面上双击某个快捷方式时,将打开一个新的子界面,并且在任务栏里创建一个链接到此界面的任务栏图标,将鼠标移动到任务栏上的图标时,将Popup出界面的实时图像缩略图,单击任务栏图标时,可让界面最大化或最小化,界面如下所示,

desk.jpg(118.63 K)

9/8/2010 8:59:50 AM

做这个任务栏界面缩略图时,使用VisualBrush将子界面的实时图像填充到Rectangle

Rectangle emptyRectangle = new Rectangle
{
Width = 250D,
Height = 130D,
Fill = new VisualBrush { Visual = child },
Margin = new Thickness(2)
};
 

复制代码

又分别使用了两个Border来模彷Windows7任务栏缩略图的圆角
使用圆角

//给任务栏的Popup界面缩略图应用圆角
Border visualBorder = new Border
{
BorderBrush = Brushes.Transparent,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(10),
Margin = new Thickness(10),
Height = 150D,
Width = 270D,
Child = emptyRectangle,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Background = this.FindResource("transparentColor")
as LinearGradientBrush
};
//对任务栏的Popup界面缩略图的背景应用圆角
Border host = new Border
{
BorderBrush = Brushes.Transparent,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(8),
Child = visualBorder,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Background = this.FindResource("thumbnailBackground")
as ImageBrush
};
 

复制代码

定义一个ToolTip用来宿主界面的缩略图
ToolTip

//添加一ToolTip,用来宿主子界面的宿略图
ToolTip visualToolTip = new ToolTip
{
Content = host,
Background = Brushes.Transparent,
BorderBrush = Brushes.Transparent,
Placement = PlacementMode.Top,
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
HasDropShadow = false,
VerticalOffset=3
};
//设计ToolTip的Popup延迟时间为20ms
ToolTipService.SetInitialShowDelay(thumbnail, 20);
thumbnail.ToolTip = visualToolTip;
 

复制代码

定义事件,子界面关闭时,从任务栏中移除此界面在任务栏上的图标,当在任务栏图标上单击鼠标时,实现界面的最大化或者最小化
定义事件

//当打开的子界面关闭时需从任务栏移除此界面在任务栏上的图标
child.Closed += delegate
{
this.statusBar.Children.Remove(hostBorder);
};
//在任务栏上单击任务图标时,最大化或者最小化子界面
hostBorder.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
if (child.WindowState == WindowState.Minimized)
{
//正常显示子界面
child.WindowState = WindowState.Normal;
child.Topmost = true;
}
else
//最小化子界面
child.WindowState = WindowState.Minimized;
}
};
 

这个程序实现起来很简单,但需要注意的是往任务栏里添加子界面任务栏图标时,应该以从上往下的顺序添加,这样可以避免重复Rendering 逻辑树的子叶点。

WPF程序模彷Windows7的桌面任务栏相关推荐

  1. WPF教程(一)---创建一个WPF程序基础知识

    1.前言: 这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2019创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言--例如C# ...

  2. WPF中获取鼠标相对于桌面位置

    原文:WPF中获取鼠标相对于桌面位置 var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFr ...

  3. WPF程序中的XPSDocumentViewer

    在.NET 3.0中,提供了对XPS文件格式的全新支持.在WPF程序中,有一个控件是DocumentViewer.这里对它的使用做一个简要介绍 <Window x:Class="Wpf ...

  4. 提高WPF程序性能的几条建议

    原文:提高WPF程序性能的几条建议 这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正.) 1. 加快WPF程序的启动速度: (1).减少需要显示的元素数量,去除不需要或者冗余的X ...

  5. 【Visual Studio】Visual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )

    文章目录 一.安装 C++ 桌面开发组件 二.创建并运行 Windows 控制台程序 一.安装 C++ 桌面开发组件 打开 Visual Studio Installer , 点击 " 修改 ...

  6. WPF PRISM开发入门一( 初始化PRISM WPF程序)

    原文:WPF PRISM开发入门一( 初始化PRISM WPF程序) 这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在G ...

  7. 在WPF程序中打开网页:使用代理服务器并可进行JS交互

    本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...

  8. 将传统 WPF 程序迁移到 DotNetCore 3.0

    介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...

  9. WPF程序将DLL嵌入到EXE的两种方法

    2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了> ...

最新文章

  1. 数据库优化案例——————某市中心医院HIS系统
  2. Electron 开发环境下总是 crash
  3. DPDK加速I/O虚拟化
  4. android 游戏的源程序代码类型,代码准备重写实现网络游戏 [开源]历时5天一款完整的文字策略养成类型游戏完成了...
  5. javascript设计模式_JavaScript 设计模式 学习总结
  6. 《Deep Learning Methods for Reynolds-Averaged Navier-Stokes Simulations of Airfoil Flows》
  7. JAVA---事件适配器----用内部类,匿名类实现事件处理
  8. 计算机网络简答题与计算题
  9. html 弹出框 自动关闭,js提示框,n秒后自动关闭
  10. 目标检测 | 解决小目标检测!多尺度方法汇总
  11. 简易版计算器APP开发
  12. Spark 列转行操作
  13. (C++)计算三角形面积
  14. IT管理体系——战略、管理和服务
  15. 一、SM1P可编程步进电机控制器简介
  16. Macy‘s Thanksgiving Day Parade
  17. 神经重症患者要防深静脉血栓形成
  18. java -Xms -Xmx -XX:PermSize -XX:MaxPermSize
  19. 在c++中,operator怎么使用
  20. 一条sql语句添加多个字段

热门文章

  1. Linux之grep命令详解
  2. 【bzoj2330】 [SCOI2011]糖果
  3. linux 开发异常错误记录
  4. [翻译]当SA帐号丢失时怎么办
  5. 就这几个简单页面APP,这混小子要我10W块?!大家评评理!
  6. 互联网寒冬来袭,有一家公司却逆流而上!
  7. 过分了!耗资 5600 万、4 年开发的网络商城成“烂尾楼”,404 无法打开
  8. 秒懂了微服务架构,看这本书就够了!
  9. 飞天茅台超卖P0事故:请慎用Redis分布式锁!
  10. 如何将maven项目打包成可执行的jar