Visual Studio 2010开发绚丽Win 7应用程序

原创
开发 后端
当你使用最新版本的操作系统,使用最新的框架进行构建,和最新的Visual Studio版本工作时,你可以利用大量的令人振奋的新功能,本文向你介绍如何使用Visual Studio 2010,WPF 4和Windows API代码包开发可以运行在Windows 7 UI上的应用程序。

【51CTO独家特稿】Windows 7 UI中最令人兴奋的元素莫过于新的任务栏或Jump List(跳转列表),虽然这些都是视觉上的创新,但不可否认,现在应用程序UI已经成为应用程序的一个重要组成部分。作为一名WPF开发人员,可以将这些元素放进你的应用程序,使其更适合于在Windows 7上运行,对主窗口内外的行为可以完全自定义。

#T#

使用WPF 4,你几乎可以获得Windows 7 UI最大特色的所有功能,WPF 4内置支持Windows 7任务栏,包括自定义缩略图预览,从任务栏的进度条、图标和Jump List就可以看见反馈信息,这些功能最终由Windows 7本地API提供,但WPF使用托管代码打包了这些API,并以WPF类的形式暴露出来,这意味着你可以在XAML中创建Jump List和其它UI对象,并通过大量的依赖属性绑定它们。

Visual Studio 2010拥有大量的与WPF相关的新功能,包括新的可视化设计器,拖放式数据绑定,在XAML中智能感知标记扩展,这些功能结合WPF新的任务栏类,使用最新版本Visual Studio 2010中的强大功能,让你可以构建最新的Windows 7应用程序。51CTO向您推荐《Visual Studio 2010应用与开发详解》专题以便于更多了解Visual Studio 2010。

虽然WPF 4完全支持任务栏,但还包括了Windows 7 API不包括的其它功能,如Windows 7风格的通用对话框,你可以从Windows API代码包中获得这些功能。Windows API代码包也有自己的一套Shell和任务栏类,从WPF 3.5 SP1中就有了。

数据绑定和Visual Studio 2010 WPF设计器

在谈及Windows 7细节之前,我们先看看如何在Visual Studio 2010 WPF设计器中建立一个基本的数据驱动WPF应用程序。在Visual Studio 2010中,通过把数据源拖放到可视化设计器中,在设计时就可以设置好数据绑定。欲了解WPF设计,51CTO向您推荐《让你的代码“炫”起来——WPF开发教程》。

如果你拖动一个数据源到一个现有的控件上(假设是一个文本框中的文本字段),设计器将会为那个数据源创建一个窗口资源,然后将字段绑定到控件上。相反,如果你拖动数据源到一个容器上,设计器会创建一个合适的绑定控件,并将其添加到容器上,如果默认的控件并不合适,你还可以对其进行设置,在图1中,我从AdventureWorks 2008示例数据库拖放了一个视图到窗口中,自动创建一个数据网格(data grid),在Windows 7任务栏上显示进度时我们需要用到数据网格。

Visual Studio 2010

图 1 在主窗口上放置一个视图数据源,自动产生一个绑定的数据网格

作为基本设置的一个额外项目,我们将介绍一下使用渐变画笔设置一个窗口的背景,Visual Studio 2010内置了一个可视化笔刷编辑器,可以方便地创建和使用渐变和图像刷以及纯色,在一个笔刷属性上点击下拉列表,打开属性编辑器,它允许你可视化地设置渐变或为图像刷选择一张图像。

背景笔刷

图 2 使用可视化笔刷编辑器创建一个背景笔刷

Windows 7任务栏

在Windows 7中,你可以在任务栏上显示长时间操作的进度,就象IE浏览器在状态栏显示文件下载的进度条一样。

通过TaskbarItemInfo类,你可以和Windows 7任务栏进行交互,在主窗口上暴露一个依赖属性,你可以在XAML中创建TaskbarItemInfo:

  1. <Window.TaskbarItemInfo> 
  2.     <TaskbarItemInfo   
  3.         x:Name="TaskbarItemInfo1" 
  4.         Description="Customer Browser: Using WPF 4 on Windows 7”  
  5.         > 
  6.     </TaskbarItemInfo> 
  7. </Window.TaskbarItemInfo> 

你可以直接在XAML中编辑TaskbarItemInfo的属性,也可以在Visual Studio属性编辑器中进行编辑,XAML代码片段仅仅显示了名字和描述属性,描述属性就是为任务栏指定的提示文本,大多数任务栏功能都可以通过这个类的属性获得。

为了显示进度条,需要设置两个属性:ProgressValue和ProgressState。ProgressState开始时为None,你可以将其设定为Indeterminate显示一个帐篷式的进度条,或设置为Normal,我这里就是设为Normal的:

  1. TaskBarItemInfo1.ProgressValue = 0;  
  2. TaskBarItemInfo1.ProgressState = TaskbarItemProgressState.Normal; 

ProgressValue等于1.0时显示一个完整的进度条,为了跟踪数据表的填写,我们首先执行一个计数查询,计算出视图中的所有行数,使用这个值作为整个进度条的值,然后连接数据表的RowChanged事件,再增加下面两行代码更新进度条:

  1. this.rowsUpdated++;  
  2. TaskbarItemInfo1.ProgressValue =  
  3.                             ((double)this.rowsUpdated)/this.rowCount; 

除了进度条外,你还可以使用图标叠加提供应用程序状态的反馈,图标叠加是在任务栏应用程序图标上方叠加一个小图标,它可以用于应用程序状态的传达,如播放或暂停,在线或离线,我们将会使用图标叠加为我们的客户列表显示一个过滤设置。

图3在任务栏上使用图标叠加显示了相同的应用程序,你会看到主程序中选中了“按国家过滤”的复选框,列表中的客户是按国家显示的,如果选中这个过滤器,任务栏图标上就会叠加显示一个选中国家国旗的小图标。

新图标

图 3 使用过滤设置的客户查看程序显示了一个叠加图标

通过对TaskbarItemInfo的Overlay属性指定一个图像资源就可设置一个叠加,对于示例,我为每个旗帜图像创建了一个位图资源,在设置过滤器时,我们可以从窗口资源载入图像,并设置叠加:

  1. string resourceKey = “flag_” + countryName;  
  2. TaskbarItemInfo1.Overlay =  
  3.                      (ImageSource)this.TryFindResource(resourceKey); 

#p#

自定义缩略图

应用程序缩略图预览是UI打扮的一部分,当你的程序运行在Windows 7上,这个功能可以免费获得,Windows 7从任务栏为主程序窗口显示一个弹出式的缩略图,用户可以使用缩略图预览激活或关闭应用程序,或是在应用程序实例间进行切换。

你可以使用TaskbarItemInfo的ThumbnailClipMargin属性自定义应用程序的缩略图图像,使用这个属性,你可以在主窗口中指定一个矩形用于显示缩略图,而不是在整个主窗口范围显示。

ThumbnailClipMargin是一个依赖属性,因此除了指定一个静态的边界外,你可以将其绑定到其它控件的边界,使用那个控件进行应用程序预览,我使用这个方法设置缩略图预览只显示客户数据网格。

设置ThumbnailClipMargin绑定

图 4 设置ThumbnailClipMargin绑定

图4显示了XAML中设置的绑定,也显示了Visual Studio 2010中新的标记扩展智能感应。

缩略图预览也包括一套工具栏按钮,允许用户直接从预览向程序发送命令,如发送媒体播放和暂停命令,对于示例,我创建了一个拷贝工具栏按钮,从一个文本框中拷贝客户的Email地址。

TaskbarItemInfo类包括一个集合属性,叫做ThumbButonInfos,通过它你就可以设置一个预览工具条,在Visual Studio 2010中,你可以在集合编辑器中编辑每个按钮,当然也可以直接在XAML中编辑。

ThumbButtonInfo通常指定发送的命令,命令目标,按钮使用的图像和提示文本,对于我们的拷贝按钮,代码如下:

  1. <ThumbButtonInfo Command="ApplicationCommands.Copy" 
  2.                  Description="Copy E-Mail Address"                
  3. ImageSource="/wpf4example;component/Images/copy.png"   
  4.                  CommandTarget="{Binding ElementName=textBox1}" /> 

通过WPF命令的魔法,根据文本框中的文本是否处于选中状态,自动启用或禁用按钮。

自定义缩略图

图 5 自定义缩略图图像和拷贝工具条按钮

Jump List(跳转列表)

Jump List是常规任务或与程序相关文件的列表,在任务栏应用程序图标上点击右键时弹出Jump List,你 可以增加文件,任务或你自己的任务分类自定义应用程序的Jump List。

Jump List与应用程序本身关联,而不是一个特定的运行实例,你可以为你的应用程序增加一个自定义Jump List,或是在XAML文件(app.xaml)中向应用程序对象附加一个Jump List。

  1. <JumpList.JumpList> 
  2.     <JumpList ShowRecentCategory="True”  
  3.               ShowFrequentCategory="True"> 
  4.         <JumpTask Title="Notepad”  
  5.                    Description="Run Notepad"                ApplicationPath="c:\windows\notepad.exe"           
  6.                    IconResourcePath="c:\windows\notepad.exe"/> 
  7.     </JumpList> 
  8. </JumpList.JumpList> 

在XAML中设置Jump List时,应用程序初始化后它会自动应用到Windows Shell。

Jump List中可以包括跳转任务,启动其它程序,也包括一个挑战路径,链接到一个文件,如果你的应用程序是某个文件类型的注册处理程序,在Jump List中才会显示跳转路径。

Windows Shell维护一套最近和应用程序最常选择的文件的列表,你可以通过设置ShowRecentCategory和ShowFrequentCategory在应用程序Jump List中显示这些列表。

除了这些标准的分类外,你还可以创建自定义分类,下面的代码增加一个跳转任务链接到calc.exe,并将其归为自定义分类。

  1. JumpTask jumpTask1 = new JumpTask();  
  2.                 jumpTask1.ApplicationPath =  
  3.                         "C:\\windows\\system32\\calc.exe";  
  4.                 jumpTask1.IconResourcePath =  
  5.                         "C:\\windows\\system32\\calc.exe";  
  6.                 jumpTask1.Title = "Calculator";  
  7.                 jumpTask1.CustomCategory = "Calculation";  
  8.  
  9. JumpList jumpList1 = JumpList.GetJumpList(App.Current);  
  10. jumpList1.JumpItems.Add(jumpTask1);  
  11. jumpList1.Apply(); 

Jump List 

图 6 一个有标准分类和自定义分类的Jump List

Windows 7对话框和控件

WPF 4中未包括Windows 7的部分是通用文件对话框API,你可以从Windows API代码包获得,代码包让你可以从WPF应用程序启动通用对话框。将代码包程序集引入到你的应用程序,就可以使用代码包命名空间中的类,包括CommonDialog。

Windows 7也包括一些著名的文件夹,如桌面,图片库,你可以在CommonDialog指定文件路径,下面的代码指定的就是打开图片库:

  1. CommonOpenFileDialog dlg = new CommonOpenFileDialog();  
  2. dlg.InitialDirectoryShellContainer =   
  3.                          (ShellContainer)KnownFolders.PicturesLibrary; 

你可以使用已知的文件夹或Shell对象为通用文件打开或文件保存对话框指定许多设置,例如,下面的代码增加视频库作为打开对话框新的打开位置:

  1. dlg.AddPlace((ShellContainer)KnownFolders.VideosLibrary,  
  2.              FileDialog.AddPlaceLocation.Bottom); 

自定义位置

图 7 Windows 7打开文件对话框增加了一个自定义位置

Windows API代码包也提供了一个打包的WPF资源浏览器控件,你可以使用它来显示文件和其它Shell对象,只需要在XAML文件中声明它就可以使用了。

  1. <WindowsAPICodePackPresentation:ExplorerBrowser 
  2.           x:Name=”explorerBrowser1”/> 

然后调用底层控件上的Navigate显示在你窗口中选择的文件夹。

  1. explorerBrowser1.ExplorerBrowserControl.Navigate(  
  2.  (ShelObject)KnownFolders.SampleMusic); 

资源浏览器控件

图 8  运行在一个示例应用程序中的Windows API代码包中的

新UI,新工具

使用WPF 4和Windows API代码包,通过完整的Visual Studio 2010 UI,你可以在本地Windows 7应用程序上加入很炫的功能,这对于开发人员来说可以收获巨大的成功感,新工具,新UI,让一切更美好!点击这里下载Visual Studio 2010

原文出处:http://www.devx.com/VS_2010/Article/43562?trk=DXRSS_LATEST

原文名:Using Visual Studio 2010 to Write Killer WPF Apps for Windows 7

作者:Steve Apiki

责任编辑:彭凡 来源: 51CTO
相关推荐

2010-11-19 12:40:12

Visual Stud云应用程序

2010-04-01 15:10:06

Visual Stud

2011-01-12 11:56:36

Visual Stud

2011-01-24 07:24:48

Visual Stud

2009-12-16 15:39:37

Visual Stud

2010-04-16 13:33:54

Visual Stud

2009-12-01 10:49:44

Visual Stud

2015-04-30 12:37:13

Visual Stud

2011-02-13 17:10:28

Visual Stud

2009-08-12 09:16:04

Vista升级Windows 7升级Visual Stud

2010-11-16 09:23:13

敏捷开发Visual Stud

2010-02-05 09:06:17

Visual Stud

2009-06-08 10:14:47

Visual StudWin 7

2009-12-02 09:43:38

Visual Stud

2009-11-11 13:24:51

Visual Stud

2009-11-13 15:44:39

Visual StudWindows 7

2009-11-10 13:43:37

Visual Stud

2009-12-01 19:28:55

Visual Stud

2009-12-15 09:36:32

Visual Stud

2010-07-20 08:43:00

Visual Stud
点赞
收藏

51CTO技术栈公众号