博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF案例 (四) 模拟Windows7桌面任务栏
阅读量:6806 次
发布时间:2019-06-26

本文共 2236 字,大约阅读时间需要 7 分钟。

原文:

   这个程序模彷了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 逻辑树的子叶点,

转载地址:http://lvhwl.baihongyu.com/

你可能感兴趣的文章
gvim 2012,8,30号 配置
查看>>
Struts2----><s:token />标签防止重复提交
查看>>
mapreduce (一) 物理图解+逻辑图解
查看>>
自动化测试 Windows 8 应用
查看>>
[译]Array.prototype.concat不是通用方法
查看>>
DropDownList 发现
查看>>
excel制作柏拉图步骤
查看>>
SQL SERVER 2000数据库置疑处理
查看>>
Android系统中的广播(Broadcast)机制简要介绍和学习计划
查看>>
A Theoretical Analysis of Feature Pooling in Visual Recognition
查看>>
【转】耐心看
查看>>
hdu 1272 小希的迷宫
查看>>
原创教程:SpagoBI4.2汉化及配置Mysql数据库教程
查看>>
大写中文数字-財务
查看>>
What is an OPC .NET Wrapper ?
查看>>
MVC5 + EF6 + Bootstrap3 (12) 新建数据
查看>>
Javascript之旅——第四站:parseInt中要注意的坑
查看>>
用Easing函数实现碰撞效果
查看>>
vc++基础班[23]---文件夹的基本操作
查看>>
关于gnome
查看>>