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 逻辑树的子叶点,

目录
相关文章
|
2月前
如何隐藏windows10系统任务栏右下角的语言输入法图标?
如何隐藏windows10系统任务栏右下角的语言输入法图标?
|
2月前
|
自然语言处理 C# 开发者
WPF开源轻便、快速的桌面启动器
WPF开源轻便、快速的桌面启动器
WPF开源轻便、快速的桌面启动器
|
20天前
|
C# 开发者 Windows
4款.NET开源、功能强大的Windows桌面工具箱
4款.NET开源、功能强大的Windows桌面工具箱
|
25天前
|
C# 开发者 Windows
WPF在.NET9中的重大更新:Windows 11 主题
这也是一个很好的学习WPF的项目,可以通过看源代码提升自己的WPF水平。 WPF Gallery演示如何在标记中指定 XAML 控件,因为每个控件页都显示用于创建每个示例的标记。它还将显示您的应用程序的所有可能的布局选项。 WPF Gallery应用还包含有关使用颜色、排版和图标开发特殊应用程序的设计指南。它还包括一个示例页,用于演示如何使用不同的控件在 WPF 应用程序中创建用户界面。 WPF在.NET 9中可以使用Win11主题的控件了,有助于WPF开发者们开发出更符合现在设计风格、更美观的界面。 希望WPF越来越好。
26 0
|
2月前
|
存储 安全 搜索推荐
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
Windows之隐藏特殊文件夹(自定义快捷桌面程序)
|
2月前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
2月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
248 1
|
2月前
|
SQL 关系型数据库 MySQL
数据库数据恢复—windows server下Mysql数据库数据恢复案例
mysql数据库数据恢复环境: 本地服务器,windows server操作系统 ,部署有mysql单实例,数据库引擎类型为innodb,独立表空间,无数据库备份,未开启binlog。 mysql数据库故障: 工作人员使用Delete命令删除数据时未添加where子句进行筛选,导致全表数据被删除,删除后未对该表进行任何操作。
|
7月前
|
NoSQL MongoDB 数据库
数据库数据恢复—Windows server环境下MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台Windows Server操作系统的虚拟机,虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测: 在未关闭MongoDB服务的情况下,工作人员将MongoDB数据库文件拷贝到其他分区,然后将原数据库文件所在分区进行了格式化的操作,格式化完成后将数据库文件拷回原分区,重新启动MongoDB服务,发现MongoDB服务无法启动并报错。
数据库数据恢复—Windows server环境下MongoDB数据库数据恢复案例