原文: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. 使用POI来实现对Excel的读写操作

    事实上我感觉直接贴代码就好了.代码里面差点儿做到每一行一个凝视.应该看起来会比較简单 代码托管在github上:https://github.com/chsj1/ExcelUtils package ...

  2. 七牛用户如何将视频转码成普清高清来适应不同的手机端或者web端

    Qiniu 七牛问题解答 非常多人会用到七牛视频转码问题,要将视频转码成适用于各种终端的视频,也有的用户对转码服务的码率,帧率,分辨率等理解不多.不知道该怎样设置这些參数.以下我给大家科普一下. 问题 ...

  3. 南京三星面试准备3--数组&基础数据结构

    1.用递归颠倒一个栈. void PushToBottom(stack<int> &mystack,int num) { if(mystack.size()==0) { mysta ...

  4. ASP.NET、HTML+CSS - 弹出提示窗体

    刷新数据,提示之后,CSS样式改变: 解决方案: 在ASP.NET中,如果是添加信息成功之后出现提示信息,那么只能用  ClientScript.RegisterStartupScript(this. ...

  5. 通过程序预览Office文档

    我承认,标题是夸大了,就是为了吸引注意力.这里只有Word文档和Excel文档的预览代码. Word://此部分来源:http://princed.mblogger.cn/posts/11885.as ...

  6. 基础知识(9)- Swing用户界面组件

    9.1 Swing和模型-视图-控制器设计模式  9.1.1 设计模式  9.1.2 模型-视图-控制器模式  9.1.3 Swing按钮的模型-视图-控制器分析 9.2 布局管理概述  9.2.1 ...

  7. 联系人数据库设计之ContactsTransaction

    不当之处,请雅正. 请自行下载android源代码 package com.android.providers.contacts; import com.google.android.collect. ...

  8. TPL异步并行编程之取消任务

    TPL异步并行编程之简单使用 在上篇随笔里面说明了Task的使用,仅仅是简单使用,有时候把一个任务交给Task去执行,但是呢还是要管理下,比如说:我要叫这个任务停止了,不做了,任务取消了,或者超时了 ...

  9. Shell 基本运算符

    Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  10. CSS 控制应为Html页面高度导致抖动的问题

    在CSS中添加如下代码: html,body{ overflow-y:scroll;} html,body{ overflow:scroll; min-height:101%;} html{ over ...