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

原文: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任务栏缩略图的圆角

使用圆角

//给任务栏的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 逻辑树的子叶点,

时间: 2024-11-09 00:59:18

WPF案例 (四) 模拟Windows7桌面任务栏的相关文章

Zabbix 3.0 生产案例 [四]

Zabbix 3.0 生产案例 [四] zabbix 时间:2016年9月22日 笔者QQ:381493251 Abcdocker交流群:454666672 如果遇到什么问题可以进群询问,我们是一个乐于帮助的集体! Zabbix 生产案例实战 一.项目规划 1.主机分组: 交换机 Nginx Tomcat MySQL 2.监控对象识别: 1.使用SNMP监控交换机 2.使用IPMI监控服务器硬件 3.使用Agent监控服务器 4.使用JMX监控Java应用 5.监控MySQL 6.监控Web状态

微信营销案例四 头条新闻

案例四:头条新闻 实时推送 当然,作为新媒体,微信当然也有其媒体传播的特性,尽管马化腾一直在弱化其媒体属性.作为微信营销的有一个案例的头条新闻,最大的卖点是信息的即时推送,头条新闻在每天下午六点左右,准时推送一天最重大新闻,订阅用户可以通过微信直接了解最近发生的大事新鲜事,不需要在海量的信息中“淘宝”. 定时推送的时间选择在下班时间,完成一天的工作在,回家的路上看看当天的新闻也不失为一种调剂,既可以了解当下的大事又可以排解路无聊. 微信营销案例四 头条新闻,布布扣,bubuko.com

应用案例之模拟双色球彩票

应用案例之模拟双色球彩票 1.双色球彩票的玩法: 双色球投注区分为红色球号码区和蓝色球号码区,红色球号码范围为01-33,蓝色球号码范围为01-16. 双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限

estore商城案例(四、五)------添加购物车&购物车显示/生成订单&在线支付

一.添加购物车 1.获得商品id提交到servlet程序 2.根据id获取product对象 3.判断seesion中是否有存在购物车session.没有的话表示  添加的第一件商品  需要先创建session:有的话直接在session里添加获得的produce(添加product 要先判断session中是否存在对应的商品,存在话直接修改商品数量,没有的话新添加这个商品). servlet程序代码: 1 public void doGet(HttpServletRequest request

tomcat URL简写案例:模拟网站www.baidu.com的访问

tomcat URL简写案例:模拟网站 * 实际URL:http://www.baidu.com:8080/myweb/1.html * 实际位置:F:\mywebapps\myweb\1.html * 最终访问URL:http://www.baidu.com * 步骤 * 1 可用:http://www.baidu.com:8080/myweb/1.html * 虚拟主机 <Host name="www.baidu.com" appBase="F:\mywebapps

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

一款超炫的后台,Ext模拟Windows桌面,Ext经典浅蓝风格,功能非常强大,包括最大化.最小化.状态栏.桌面图标等,不过需要非常懂Ext脚本的才可驾驭它.? 1.图片 ?2. [代码][HTML]代码  <html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Ext 2.0 Desktop

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

原文:WPF案例 (六) 动态切换UI布局 这个Wpf示例对同一个界面支持以ListView或者CardView的布局方式呈现界面,使用控件ItemsControl绑定数据源,使用DataTemplate为ItemsControl分别预定义了ListView和CardView的样式,在程序运行时,可在这两种Layout之间互相切换,界面如下.源代码在这里下载   为ItemsControl定义ListView UI布局的ItemTemplate,并指定MouseOver时DataTemplate

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

原文:WPF案例 (五) 对控件界面使用倒影 在这个程序里对5个2D控件界面应用了垂直倒影,边缘模糊化和模型变换,在本例中,这5个2D控件为Border, 各包含了一幅Image,界面如下图所示,源码从这里下载 本例中使用Viewport2DVisual3D来呈现2D的Border,Border中包含了Image,对Viewport2DVisual3D使用了RotateTransform3D模型变换,以使Viewport2DVisual3D向左或者向右倾斜45度角,为使处于左右两端的Image能

WPF控件模拟双击事件

Action a = () => { i += 1; var timer = new System.Timers.Timer(800) { Interval = 600 }; timer.Elapsed += (sender, e) => { timer.Enabled = false; i = 0; }; timer.Enabled = true; if (i % 2 == 0) { i=0; timer.Enabled = false; //你的代码 } }; name_headChatW