WPF案例 (四) 模拟Windows7桌面任务栏

简介: 原文:WPF案例 (四) 模拟Windows7桌面任务栏   这个程序模彷了Windows7的桌面任务栏,当在桌面上双击某个快捷方式时,将打开一个新的子界面,并且在任务栏里创建一个链接到此界面的任务栏图标,将鼠标移动到任务栏上的图标时,将Popup出界面的实时图像缩略图,单击任务栏图标时,可让界面...
原文: WPF案例 (四) 模拟Windows7桌面任务栏

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

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

1   Rectangle emptyRectangle  =   new  Rectangle
2    {
3        Width  =  250D,
4        Height  =  130D,
5        Fill  =   new  VisualBrush { Visual  =  child },
6        Margin  =   new  Thickness( 2 )
7    };

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

img_405b18b4b6584ae338e0f6ecaf736533.gif 使用圆角
  // 给任务栏的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用来宿主界面的缩略图

img_405b18b4b6584ae338e0f6ecaf736533.gif 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;

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

img_405b18b4b6584ae338e0f6ecaf736533.gif 定义事件
// 当打开的子界面关闭时需从任务栏移除此界面在任务栏上的图标
  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 逻辑树的子叶点,

目录
相关文章
|
5月前
|
人工智能 搜索推荐 C#
C#开源且免费的Windows桌面快速预览神器 - QuickLook
C#开源且免费的Windows桌面快速预览神器 - QuickLook
133 0
|
4月前
|
数据可视化 uml Docker
在本地Windows 11 系统的桌面版Docker上搭建PlantUML
在本地Windows 11 系统的桌面版Docker上搭建PlantUML
43 0
|
29天前
|
PHP Windows
|
2月前
|
网络协议 安全 Linux
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
|
2月前
|
SQL 关系型数据库 MySQL
数据库数据恢复—windows server下Mysql数据库数据恢复案例
mysql数据库数据恢复环境: 本地服务器,windows server操作系统 ,部署有mysql单实例,数据库引擎类型为innodb,独立表空间,无数据库备份,未开启binlog。 mysql数据库故障: 工作人员使用Delete命令删除数据时未添加where子句进行筛选,导致全表数据被删除,删除后未对该表进行任何操作。
|
1月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
57 1
|
2月前
|
NoSQL MongoDB 数据库
数据库数据恢复—Windows server环境下MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统的虚拟机,虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测: 在未关闭MongoDB服务的情况下,工作人员将MongoDB数据库文件拷贝到其他分区,然后将原数据库文件所在分区进行了格式化的操作,格式化完成后将数据库文件拷回原分区,重新启动MongoDB服务,发现MongoDB服务无法启动并报错。
数据库数据恢复—Windows server环境下MongoDB数据库数据恢复案例
|
3月前
|
监控 C# Windows
内网桌面监控软件中的远程控制功能实现(基于C#和Windows Forms)
近年来,随着远程办公的兴起,对内网桌面监控软件的需求逐渐增加。本文将探讨如何通过C#和Windows Forms实现内网桌面监控软件中的远程控制功能,并在结尾部分介绍监控到的数据如何自动提交到网站。
246 0
|
3月前
|
程序员 C# 异构计算
一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
一个为程序员定制的、WPF开发的小巧、美观桌面快捷工具
41 0
|
3月前
windows10为何鼠标右键失灵,桌面右键一直转圈的解决
windows10为何鼠标右键失灵,桌面右键一直转圈的解决
857 0

相关产品

  • 云迁移中心