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月前
|
人工智能 API 调度
微软开源Windows桌面智能体操作系统!UFO²:一句话调度多应用,自动协同工作
UFO²是微软推出的Windows桌面多智能体操作系统,通过中央HostAgent协调多个AppAgent实现跨应用任务自动化,结合GUI交互和原生API调用提升执行效率,支持虚拟桌面隔离运行。
207 3
微软开源Windows桌面智能体操作系统!UFO²:一句话调度多应用,自动协同工作
|
2月前
|
XML 存储 搜索推荐
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
63 7
Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理
|
10月前
|
API Docker Windows
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
这篇文章是一份关于Ollama工具的一站式使用指南,涵盖了在Windows系统上安装、使用和定制服务,以及实战案例。
2024 Ollama 一站式解决在Windows系统安装、使用、定制服务与实战案例
|
10月前
|
vr&ar C# 图形学
WPF与AR/VR的激情碰撞:解锁Windows Presentation Foundation应用新维度,探索增强现实与虚拟现实技术在现代UI设计中的无限可能与实战应用详解
【8月更文挑战第31天】增强现实(AR)与虚拟现实(VR)技术正迅速改变生活和工作方式,在游戏、教育及工业等领域展现出广泛应用前景。本文探讨如何在Windows Presentation Foundation(WPF)环境中实现AR/VR功能,通过具体示例代码展示整合过程。尽管WPF本身不直接支持AR/VR,但借助第三方库如Unity、Vuforia或OpenVR,可实现沉浸式体验。例如,通过Unity和Vuforia在WPF中创建AR应用,或利用OpenVR在WPF中集成VR功能,从而提升用户体验并拓展应用功能边界。
231 1
|
9月前
|
安全 Windows
电脑进入桌面后操作无响应?不妨试试禁用Windows Search服务
电脑进入桌面后操作无响应?不妨试试禁用Windows Search服务
|
9月前
|
API Windows
MASM32编程获取Windows当前桌面主题名
MASM32编程获取Windows当前桌面主题名
|
10月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
523 0
|
10月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
774 0
|
10月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
191 0
|
10月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
226 0