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

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

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

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

又分别使用了两个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案例 (三) 模拟QQ“快速换装"界面

    原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...

  2. WPF案例(-)模拟Windows7 Win+Tab切换

    原文:WPF案例(-)模拟Windows7 Win+Tab切换 一个使用Wpf模拟Windows7 Win+Tab页面切换的小程序,使用快捷键Ctrl+Down或Ctrl+Up在示例程序各个页面元素之 ...

  3. WPF案例(二)模拟Apple OS 界面前后180度反转

    原文:WPF案例(二)模拟Apple OS 界面前后180度反转 我们在设计应用程序界面的时候,为了充分利用界面空间,住住需要灵活的界面布局方式,比如可以在界面正面空间上定义一个Chart,背面空间上 ...

  4. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!

    Android实训案例(四)--关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程! 关于2048,我看到很多大神,比如医生,郭神,所以我也研究了一段时间,还好是研究 ...

  5. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

  6. tomcat URL简写案例:模拟站点www.baidu.com的訪问

    tomcat URL简写案例:模拟站点  * 实际URL:http://www.baidu.com:8080/myweb/1.html  * 实际位置:F:\mywebapps\myweb\1.htm ...

  7. WPF案例 (六) 动态切换UI布局

    原文:WPF案例 (六) 动态切换UI布局 这个Wpf示例对同一个界面支持以ListView或者CardView的布局方式呈现界面,使用控件ItemsControl绑定数据源,使用DataTempla ...

  8. WPF案例 (五) 对控件界面使用倒影

    原文:WPF案例 (五) 对控件界面使用倒影 在这个程序里对5个2D控件界面应用了垂直倒影,边缘模糊化和模型变换,在本例中,这5个2D控件为Border, 各包含了一幅Image,界面如下图所示,源码 ...

  9. Ext js框架模拟Windows桌面菜单管理模板

    一款超炫的后台,Ext模拟Windows桌面,Ext经典浅蓝风格,功能非常强大,包括最大化.最小化.状态栏.桌面图标等,不过需要非常懂Ext脚本的才可驾驭它.​ 1.图片 ​2. [代码][HTML] ...

随机推荐

  1. Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

    1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...

  2. EasyUI - SearchBox 搜索框

    效果: html代码: <input id="ss"/> <div id="mm"> <div data-options=&quo ...

  3. 【C语言】超大数乘法运算

    昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤! 于是乎就自己研究了如何进行超大数的计算! /************* ...

  4. axure母版(模板)区域介绍

    axure的模板区域是非常重要的一个功能,网站的头部.尾部部分等很多页面同时用到的内容,都可以使用母版,因为在母版中只需要修改一次,就可以实现所有的页面更新,可以大大的加速原型的制作速度.需要重复理解 ...

  5. HTML语言简单回顾

    简单复习一下html语言. html的基本结构如下: <html> <head> <title></title> </head> <b ...

  6. static作用

    C程序一直由下列部分组成:      1)正文段——CPU运行的机器指令部分:一个程序仅仅有一个副本:仅仅读,防止程序因为意外事故而改动自身指令:      2)初始化数据段(数据段)——在程序中全部 ...

  7. RobotFramework 自定义Library

    RobotFramework 主要使用Python,这里简单自定义Library,以扩充RobotFramework的功能 新建一个python类,自定义需要的方法 例如: 保存成TestLibrar ...

  8. mac 修改系统配置参数 主机名 等

    mac 修改系统配置参数,可以使用 命令 scutil 参考网址: https://developer.apple.com/library/mac/documentation/Darwin/Refer ...

  9. hdoj 2066 一个人的旅行 【多源多汇最短路】

    题目:hdoj 2066 一个人的旅行 方法:缩点 + 最短路 分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手. 这个题目就是典型的多源多汇最短路 方法:把全部的源点压缩成一个 ...

  10. JSP中两种include的区别

    首先说明这两种都是什么: <%@ include file=”relativeURI”%> 可以叫作静态include(静态包含),是jsp指令中的一种,(JSP指令控制JSP编译器如何去 ...