Scott Guthrie 博客中文版

Scott Guthrie's Blog on ASP.NET and .NET (英文原版地址:http://weblogs.asp.net/scottgu)

   博客堂 :: 首页 :: 联系 :: RSS 2.0 ::
随笔 - 252, 评论 - 1157, 引用 - 436

导航

标签

每月存档

最新留言

广告

【第1页/共2页,15条】
首页
前页
1

11月6日链接篇: ASP.NET, ASP.NET AJAX, jQuery, ASP.NET MVC, Silverlight 和 WPF

【原文地址】Nov 6th Links: ASP.NET, ASP.NET AJAX, jQuery, ASP.NET MVC, Silverlight and WPF
【原文发表日期】 Thursday, November 06, 2008 12:34 AM

上个星期是我们重要的PDC大会,这个星期我正忙着赶拉下的工作。我希望不久就会发表一堆新的贴子(包括一些针对在PDC上所做的宣布的贴子)。在那之前,这里是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight教程网页里我以前写的众多很受欢迎的文章的链接。

ASP.NET

ASP.NET AJAX 和 jQuery

ASP.NET MVC

Silverlight 和 WPF

希望本文对你有所帮助,

Scott

posted on 2008-11-07 07:19:02 by scottgu  评论(2) 阅读(10118)

10月22日链接篇: ASP.NET, Visual Studio, WPF 和 Silverlight

【原文地址】October 22nd Links: ASP.NET, Visual Studio, WPF and Silverlight
【原文发表日期】 Wednesday, October 22, 2008 9:46 PM

这是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight教程网页里我以前写的众多很受欢迎的文章的链接。

ASP.NET

Visual Studio

Silverlight 和 WPF

希望本文对你有所帮助,

Scott

posted on 2008-10-24 08:54:17 by scottgu  评论(1) 阅读(8128)

5月20日链接篇: ASP.NET, ASP.NET AJAX, .NET, Visual Studio, Silverlight, WPF

【原文地址】May 20th Links: ASP.NET, ASP.NET AJAX, .NET, Visual Studio, Silverlight, WPF
【原文发表日期】 Tuesday, May 20, 2008 10:02 PM

很抱歉,过去的几个星期贴子稀少,最近这里工作和生活都很忙。为活跃一下气氛,下面是我链接系列的新贴子。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight 教程网页中文版)里我以前写的众多很受欢迎的文章的链接。

ASP.NET

ASP.NET AJAX

.NET

Visual Studio

Silverlight

WPF

希望本文对你有所帮助,

Scott

posted on 2008-05-23 05:49:36 by scottgu  评论(2) 阅读(10080)

Visual Studio 2008 和 .NET Framework 3.5 Service Pack 1 Beta

【原文地址】Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta
【原文发表日期】 Monday, May 12, 2008 9:51 AM

今天早些时候,我们发布了.NET 3.5 SP1 和 VS 2008 SP1的公开beta版,这些服务更新提供了自11月份我们发布这些产品之后所报告的问题的缺陷修补以及性能改进的累积结果,内中还包含了若干新功能和功能增强,势将进一步完善.NET应用的建造(其中的一些细节请见下文)。

我们计划在今夏,作为免费更新,同时发布.NET 3.5 SP1 和 VS 2008 SP1的最终版本,你可以在这里下载和安装这些beta版。

SP1 Beta安装重要注意事项

今天发布的SP1 beta版还处于beta状态,所以你在重要的机器上安装时千万要慎重,下面是几个你需要知道的非常重要的SP1 Beta安装注意事项:

1) 如果你目前正运行Windows Vista的话,你应该确定在尝试安装 .NET 3.5 SP1 Beta之前安装了Vista SP1。如果运行 Vista RTM版本的话,安装.NET 3.5 SP1会有一些问题,这些问题将会在.NET 3.5 SP1的最终版中得到解决。到那之前,请确定在安装.NET 3.5 SP1 beta之前安装Vista SP1。

2) 如果你在你的机器上安装了VS 2008 Tools for Silverlight 2 Beta1安装包,你必须在安装VS 2008 SP1 Beta之前先卸载它,同时还必须卸载VS 2008的KB949325更新否则你的安装会失败。你可以在这里找到可以遵循的确切步骤的更多细节(注:你必须分开卸载这两样东西)。 在你机器上同时拥有Silverlight 2 运行时和.NET 3.5 SP1是没问题的,需要卸载的组件是VS 2008 Tools for Silverlight 2安装包。我们将在几个星期后发布可在VS 2008 SP1 beta下工作的VS 2008 Tools for Silverlight更新包。

3) .NET 3.5 SP1 beta版的一个行为变化会给Expression Blend的正式版造成问题。这个行为变化将会在.NET 3.5 SP1的最终版中恢复过来,到那时,Blend的所有版本运行起来都不会有问题。在那之前,你需要下载这最近更新过的Blend 2.5版本绕过这个问题。

Web开发之改进

.NET 3.5 SP1 和 VS 2008 SP1 内含一堆针对web应用开发的功能改进。

关于特定于VS方面的工作(包括具体的缺陷修补细节),VS Web Dev Tools开发团队在这里提供了细节。下面是web空间的一些工作的细节:

ASP.NET Data Scaffolding 支持 (ASP.NET 动态数据)

.NET 3.5 SP1添加了对一个丰富的ASP.NET 数据"scaffolding"框架的支持,该框架允许你很快地建造工作的数据驱动的web应用。使用ASP.NET 动态数据的功能,你可以自动地对各种数据对象模型(包括LINQ to SQL, LINQ to Entities, REST Services, 以及任何其他的ORM或者由动态数据提供器提供的对象模型)建造web UI(包含完整的CRUD,创建,读取,更新,删除的支持)。

SP1往ASP.NET中现有的 GridView, ListView, DetailsView 和 FormView控件中添加了这个新功能,提供了智慧的验证和灵活的数据模板选项,它还提供了智慧的新过滤性服务器控件,以及支持自动traverse主键/外键关系,显示友好的外键名称,所有这些都会给你省下成堆的代码。

你可以在Scott Hanselman这里的录像和教程中了解到关于该功能的有关细节。

ASP.NET 路径选择引擎(System.Web.Routing)

.NET 3.5 SP1包含了一个灵活的新URL路径选择引擎,它允许你把进来的URL映射到路径处理器上去。它包含了对从干净的URL(例如, /Products/Browse/Beverages)中分析出参数的支持,以及对从路径注册中动态计算和生成新的URL的支持。

这个新的路径选择引擎为ASP.NET动态数据,以及新的ASP.NET MVC框架所用,它将同时支持基于WebForms和MVC的请求。

ASP.NET AJAX 倒退/前进按钮历史支持

.NET 3.5 SP1 往 ASP.NET AJAX中加了新的API,允许你更好地控制浏览器的历史列表(允许你控制浏览器的倒退/前进按钮的行为)。

你可以在这里的文章,以及这里的screencast中了解有关这个功能的细节。

ASP.NET AJAX 脚本合成支持

.NET 3.5 SP1 在<asp:ScriptManager>服务器控件上引进了一个新的<CompositeScript>元素,它允许你用声明的方式在其中定义多个脚本引用。在CompositeScript元素中的所有脚本引用,会在服务器上合成起来,以单个脚本的行为提供给客户端,减少了对服务器的请求数目,改进了ASP.NET AJAX应用的页面装载时间。

这个脚本合成功能支持基于路径的脚本以及基于程序集资源的脚本,是使用ScriptResources.axd处理器动态地提供合成的脚本的。

Visual Studio 2008性能改进: HTML 设计器 和 HTML 源码编辑器

二月份时,我们发布了一个热补累积版,其中包含对VS 2008 Web设计器的若干性能改进和缺陷修补,VS 2008 SP1包括了所有这些修补,还提供了若干额外的性能改进。

Visual Studio 2008 JavaScript脚本格式化和代码设置

Visual Studio已经有好几个版本支持丰富的VB和C# 源代码格式化选项(间距,换行,大括号位置等等)。

VS 2008 SP1对 JavaScript(<script> 代码块和.js文件)也提供了丰富的源代码格式化支持,你现在可以使用工具->选择对话框来配置你的Javascript编程设置:

这些设置将会在你在源码编辑器中键入新的Javascript代码时自动采用,你也可以选择现有的代码,右击,选择“格式化选择部分”选项来对现有Javascript代码施用你的样式设置。你可以在 这里了解到有关这个新功能的细节。

Visual Studio 对多个 Javascript/AJAX 框架更好的Javascript Intellisense支持

VS 2008 在源码视图中包含了对Javascript Intellisense 的支持。 初始VS 2008版本的intellisense,很好地支持原生的JavaScript,以及使用ASP.NET AJAX JavaScript 类型模式编写的代码。 但JavaScript是门非常灵活的语言, 许多JavaScript库充分利用了这灵活性,来实现他们各自的功能,但有时候其实现方式妨碍了intellisense引擎提供代码完成的支持。

VS 2008 SP1对流行的JavaScript库添加了更棒的intellisense支持,特别地,我们花了功夫支持JQuery, Prototype, Scriptaculous, ExtJS, 以及其他流行的库。在你引用这些库时,你会得到默认的intellisense。 我们还在研究是否可以对一些比较流行的库维护另外的intellisense提示文件,你可以下载这些文件以得到更好的intellisense和文档支持。

下面是一个在VS 2008 SP1 JavaScript intellisense引擎中使用JQuery起始函数的例子:

注意下面VS 2008 SP1现在即使是在连串的JQuery选择器上也能提供方法参数完成:

Visual Studio对ASP.NET项目中WCF服务的重构支持

VS 2008 SP1对包含在ASP.NET Web Site 和 ASP.NET Web Application项目中的 WCF 服务添加了更好的重构支持。

假如你使用重构支持,对WCF服务重新命名类名,接口契约,或者命名空间,VS 2008 SP1现在将会自动地修正web.config和引用它的SVC文件。

Visual Studio对经典ASPIntellisense和调试的支持

Visual Studio的早期版本包括了对经典ASP(.asp)网页中intellisense和调试的支持,但VS没有创建经典的ASP网页/项目的文件和项目模板已经有几个版本了。在初始的VS 2008中,我们不正确地假设这意味着大家不在使用经典ASP的支持了,但我们在发布VS 2008之后听到了反馈说人们实际上还在使用。

在VS 2008 SP1中,对经典ASP intellisense和调试的支持又回来了:

 

Visual Web Developer Express 版对类库和Web Application项目的支持

免费的Visual Web Developer 2008 Express 版也在SP1中作了更新,加了对类库和ASP.NET Web Application项目类型的支持。Visual Web Developer Express版的早期版本只支持ASP.NET web-site项目。

此外,对类库和web应用项目的支持还将允许你在免费的Visual Web Developer 2008版中建造ASP.NET MVC和Silverlight项目。上面所有的JavaScript,动态数据,经典ASP, 以及 AJAX改进都将在Visual Web Developer Express版中工作。

对客户端开发的改进

.NET 3.5 SP1 和 VS 2008 SP1包含了针对客户端应用开发的重大的性能,部署,和功能改进。

Tim Sneath在这里有一篇精彩的博客贴子,讨论了其中一些客户端开发方面的改进,下面是相关的细节:

应用启动和Working Set性能改进

.NET 3.5 SP1 包括了对CLR的非常重大的性能改进,将导致极其快速的应用启动,特别是在“冷启动”的场景下(指目前没有任何.NET应用在运行)。这些得益大部是通过改变CLR NGEN文件中的块布局,以及通过极大地优化IO访问模式来取得的。我们还将对我们的JIT代码生成器做一些很好的优化,以允许使用结构体的方法的更好的行内化。

今天,在安装SP1后,对大型的.NET客户端应用的测量,我们发现启动的速度之提高几达百分之四十,这些优化在某些情形下还有将ASP.NET 应用每秒请求的吞吐量提高了至百分之十的副作用。

新的New .NET 框架客户端Profile安装包

.NET 3.5 SP1还给建造.NET客户端应用的开发人员引进了一个被称为“.NET Framework Client Profile”的新安装包选项,它提供了一个新的安装程序,能在还没有安装.NET框架的机器上提供更小,更快,和更简单的.NET客户端应用的安装体验。

.NET Framework Client Profile安装只包括了.NET框架中常用于客户端应用场景的那些程序集和文件。例如,它包括了Windows Forms, WPF, 和 WCF,并不包括ASP.NET和那些主要用于服务器场景的那些库和组件。我们预期这个安装包的大小大概在26MB左右,比之完整的.NET框架安装包,下载和安装将快很多。

.NET Framework Client安装包中的程序集和APIs跟完整的.NET框架安装包中的那些程序集和APIs是百分之百一样的,这意味着应用可以定向于NET 3.5 SP1的Client Profile和完整的Profile,不需要做重新编译。在.NET Client Profile安装包下工作的所有的 .NET应用,在完整的.NET框架下也自动工作。

开发人员可以在VS 2008 SP1中调出客户端应用的项目属性页来指定他们建造的客户端应用同时支持.NET Framework Client Profile和完整的.NET框架。在项目属性页上,他们可以选择一个新的复选框,表示它只需要包含在.NET Framework Client Profile中的那些程序集:

VS 2008然后就会确认项目只引用了发布在Client Profile安装包中的那些程序集,如果你尝试使用一个不在Client Profile中的程序集中的一个类型的话,它就会产生一个编译错误。编译好的客户端应用然后就可以在安装了完整的.NET框架的机器,以及只安装了.NET Framework Client Profile的机器上运行。

如果你有一个机器,只安装了.NET Framework Client Profile,你在上面尝试运行一个没有标记支持.NET Framework Client Profile的.NET应用的话,CLR会拒绝运行这个应用,它会提示终端用户更新到完整的.NET框架安装包。这确保应用总是可以正确地运行,开发人员不用操心在运行时遭遇缺失程序集的错误,如果用户尝试在一个只安装了.NET Framework Client Profile的机器上运行一个需要完整的.NET框架的应用的话。

我们认为很大类的.NET客户端应用将能够使用这个新的.NET Client Profile安装来显著地加速它们的安装,促成友好得多的消费者体验。

针对客户端应用的新.NET Framework Setup Bootstrapper

.NET 3.5 SP1 引进了一个新的bootstrapper组件,你可以用在客户端应用中来帮助自动确认机器上安装有正确的.NET框架版本。

这个bootstrapper组件负责自动地从Internet上下载和安装.NET Framework Client Profile或完整的.NET框架安装包,假如你的机器没有安装这2者的话。这个bootstrapper还自动地负责升级安装了早期.NET框架版本的机器。例如,假如你的机器已经安装了.NET 3.0,而你的应用要求.NET 3.5,这个bootstrapper可以只下载将其升级到.NET 3.5的那些更新文件,从而避免下载完整的.NET框架安装包。

这个安装bootstrapper组件可以用于基于ClickOnce的安装包,也可以用于第三方的安装产品(象Installshield)。这个boostrapper可以促成完全定制的安装品牌体验(象闪屏,定制的安装向导步骤等等),应该极大地方便建造优化的客户端安装体验。

ClickOnce客户端应用部署的改进

.NET 3.5 SP1包括了针对Windows Forms和WPF应用的ClickOnce部署的若干改进。其中一些改进包括:

Windows Forms控件

SP1 添加了若干新的Windows Forms控件,包括新的矢量形状,打印, 以及DataRepeater控件:

 

WPF 性能之改进

.NET 3.5 SP1包括了若干WPF的显著性能优化和改进,其中一些具体的图形方面的改进包括:

SP1还在WPF中加了更好的数据扩缩性。ListView, ListBox 和 TreeView 控件现在支持“个项容器回收(item container recycling)”和“虚拟化(virtualization)”,允许你在卷动的场景下轻松地得到百分之四十的性能改进。这些控件现在还支持“延缓卷动(deferred scrolling)”的功能,它允许你避免实时卷动,而是等到用户放开卷动按钮时才卷动(Outlook中的默认卷动模式),这在对非常大的数据集快速卷动时会非常有用。

WPF的数据改进

.NET 3.5 SP1包括了针对WPF的若干数据绑定和编辑改进,它们包括:

WPF现在还提供了钩子,允许开发人员编写支持虚拟化卷动方式的定制面板。我们将把这个支持与上面的数据绑定改进一起使用来建造将在今年稍后发布的新WPF datagrid。

WPF可扩展的Shader效果

.NET 3.5 SP1在WPF中添加了对一个新的shader效果架构和APIs的支持,它允许你创建极有表现力的视觉效果并将其施加到WPF中的任何控件和元素上。这些shader效果支持多个输入组合的混合,使它们强而有力的是WPF是使用GPU来运行这些效果的(包括你自己建造的定制效果),给与你完全的硬件加速图形性能。几乎跟WPF中的每样东西一样,你还可以在效果的属性上使用WPF数据绑定和动画效果,将它们完全整合到一种体验之中。

将一个效果施用到一个控件上是极其容易的事,只要设置控件的Effect属性就可以了。例如,要将一个硬件加速的drop-shadow效果用到一个按钮上,你可以通过代码或XAML在按钮上使用内置的<DropShadowEffect>:

这将导致按钮象这样渲染:

因为效果是可扩展的,开发人员可以创建他们自己的自定义的Effect对象,然后使用它们。例如,可以创建一个自定义的DirectionalBlurEffect,将它加到ListBox控件上,在你快速卷动时,改变它的卷动外观,使用一个模糊效果:

留意Greg Schechter的博客,了解Effects架构的工作原理的细节,以及学习如何在你的应用中创建和施加新的效果(他的第一组贴子在这里)。

注: 除了引进新的Shader效果API外, SP1中的WPF还更新了现有的Blur和DropShadow Bitmap效果以支持硬件加速。

WPF与Direct3D的互操作性

.NET 3.5 SP1加了支持,把Direct3D有效地集成进WPF,这让你可以对硬件更直接的访问,可以在WPF应用中充分利用Direct3D API。你将能够把Direct3D内容当作应用中的图像一样处理,以及使用Direct3D内容作为WPF控件的纹理。

例如,下面是Direct3D SDK中的三个例子:

我们可以在一个WPF应用中把它们载入图像表面,或将它们映射成WPF控件的纹理。下面是将它们在一个WPF 3D应用中映射成立方体的纹理的例子:

注: Direct3D集成还不在今天的SP1版本中,但将在SP1的最终版中。

VS 2008对WPF的改进

VS 2008 SP1包括了对WPF项目和WPF设计器的若干显著的改进,这些包括:

SP1中的调试器也被更新了,XAML标识中的运行时错误(例如,应用的样式,数据源以及其他不存在的对象),现在将更容易在调试器中识别:

Data开发的改进

.NET 3.5 SP1 和 VS 2008 SP1 包括对数据开发的一堆改进,其中的一些包括:

SQL 2008 支持

VS 2008 和 .NET 3.5 被更新到包括对即将发布的SQL 2008的支持,Visual Studio 2008数据设计器,项目和向导现在完全支持连接和操作SQL 2008数据库。

ADO.NET 实体框架和LINQ to Entities:

.NET 3.5 SP1 包括了新的ADO.NET实体框架,该框架允许开发人员对他们的关系数据定义较高层次的视图数据对象,然后通过这个模型进行编程。象继承,复杂类型和关系(包括多对多支持)等概念可以用该框架来建模,VS 2008 SP1现在包括了内置的设计器支持来帮助这样的建模:

ADO.NET实体框架和VS 2008实体框架设计器现在同时支持可插拔的提供器模型,允许它们可以用于任何数据库(包括Oracle, DB2, MySql, PostgreSQL, SQLite, VistaDB, Informix, Sybase和其他数据库)。

然后,开发人员可以使用LINQ 和 LINQ to Entities 来查询,操作和更新这些实体对象。

ADO.NET 数据服务(原代号名为Astoria)

.NET 3.5 SP1包括了允许创建基于REST的数据服务的灵活框架。原代号为Astoria,ADO.NET 数据服务框架(Data Services framework)提供了这样的支持,可以通过标准的REST URI句法来发布数据,使用标准的HTTP动词来操作数据资源。开发人员可以轻松地呈现使用ADO.NET实体框架创建的数据模型,以及使用可插拔的提供器模型来呈现其他数据模型。

除了发布数据源外,该框架还加了可以操作远程REST服务的客户端API,包括在这客户端API中的是一个允许对REST服务进行远程查询的LINQ库。

WCF 开发之改进

.NET 3.5 SP1 和 VS 2008 SP1 包括了对WCF开发的若干增强,其中一些增强包括:

VB 和 C# 改进

VB 和 C# 开发团队在VS 2008 SP1也加了一些非常好的改进:

Visual Basic

你现在可以往Visual Basic项目中加入“XML to Schema”条目,在加了这些项目条目外,会打开一个向导,允许你根据各种XML源来创建XSD数据定义集。然后,这个数据定义集就会加到项目中,促成VB XML intellisense。这个支持以前可以通过一个web下载来获取,你可以在这里了解有关详情。

VS 2008 SP1中还包括了一个XSD浏览器, 允许你浏览XSD数据定义集。在SP1的最终版中,开发人员将能够右击VB代码编辑器中的XML元素名称(无论是在XML属性中还是XML明文中),选择“Go To XML Schema Definition”,这会打开XSD浏览器,显示VB项目的数据定义集(同时选择当前元素)。

C#

C#代码编辑器现在能够识别以前需要明确编译才能识别的许多语义代码问题,在它们下面显示红色曲线以示错误。例如,如果你在目前的C#代码编辑器中试着声明和使用一个未知的类型的话,在编译之前,你不会看到编译错误。但在SP1中,你会马上看到表示错误的红色的曲线(不需要明确的编译)。

VS 2008 SP1中的调试器还作了改进,对在调试时估算LINQ表达式和查看结果集提供了更多的调试支持:

启用LINQ的数据源在调试器查看窗口中将显示一个“结果视图(Results View)”节点,将这个节点展开,将对LINQ表达式进行运算,允许你查看它返回的实体对象:

Team Foundation Server 的改进

TFS 2008 SP1 包括了许多改进,请阅读Brian Harry的Team Foundation Server 2008 SP1 预览博客贴子以了解详情。

结语

.NET 3.5 SP1 和 VS 2008 SP1 提供了一堆缺陷修补,性能改进和额外的功能增加,将更完善对所有类型的.NET应用的开发,这将是一个完全兼容的服务包版本。

我们计划在今夏以免费更新的方式发布.NET 3.5 SP1和VS 2008 SP1的最终版本,你现在可以在这里下载和使用这个beta版本。

希望本文对你有所帮助,

Scott

posted on 2008-05-16 14:27:19 by scottgu  评论(0) 阅读(16199)

技巧/诀窍: 创建和使用Silverlight和WPF 用户控件

【原文地址】Tip/Trick: Creating and Using Silverlight and WPF User Controls
【原文发表日期】Friday, April 04, 2008 1:37 AM

Silverlight和WPF一个根本性的设计目标是允许开发人员能轻松地将UI功能封装进可重用的控件。

你可以从一个现有的Control类(Control基类或者象TextBox和Button这样的控件)继承而来,实现新的自定义控件。或者你也可以创建可重用的用户控件,可以方便地使用XAML标识文件组成一个控件的UI(因此建造起来容易之极)。

在我的Digg教程系列贴子的第六部分中,我示范了如何使用VS 2008的“添加新项”对话框创建一个新的用户控件,然后在其中定义UI。这个方法在你预先知道你想要在用户控件里封装UI时,非常有效。你还可以在Expression Blend中使用同样的技术。

将现有的UI封装成用户控件

有的时候,只有在你已经开始在父页或父控件上定义一些UI之后,你才知道你要将某些UI功能封装成可重用的用户控件。

例如,我们也许正设计一个表单,要允许用户输入运输和结帐信息。我们也许会先创建一些UI,来封装地址信息。要达成目的,我们可以往页面上加一个<border>控件,在其中内嵌一个网格布局面板(2列4行),然后往其中放置标签和文本框控件:

在仔细地布局完之后,我们也许会想到,“嗨,对结帐地址我们也要用完全一样的UI,也许我们应该创建一个可重用的地址用户控件,这样我们可以避免重复自己”。

我们可以使用“添加新项”项目模板的方式来创建一个空白的新用户控件,然后将上面的UI内容拷贝进去。

但一个可在Blend中使用的更快的诀窍是,在设计器中,选中我们要封装成用户控件的控件们,然后右击,选择“做成控件”菜单选项:

当我们选择“做成控件”菜单项时,Blend会提示我们输入要创建的新用户控件的名称:

我们将其命名为“AddressUserControl”,然后点击OK。这会导致Blend创建一个新用户控件,内含我们选中的内容:

在重新编译项目,回到原先的页面后,我们将看到跟以前一样的UI,除了地址UI现在被封装进AddressUserControl外:

我们可以将第一个AddressUserControl命名为“ShippingAddress”,然后在页面上添加该用户控件的第二个实例来记录结帐信息(我们将这第二个控件实例命名为“BillingAddress”):

现在假如我们要改变地址的外观的话,我们可以只在一个地方做改动,然后就可以将该改动同时施用到运输和结帐信息上去。

将地址对象数据绑定到AddressUserControl

至此,我们有了一些用户控件封装了了地址UI,让我们来创建一个Address数据模型类,我们可以用来数据绑定到用户控件上。我们将定义象下面这样的类(利用了新的自动属性的语言特性):

然后在我们的Page.xaml文件的后台代码文件中,我们可以生成我们的Address类的2个实例,一个为运输地址,另一个为结帐地址(为这个例程的目的,我们将在地址对象中填充伪数据)。然后我们将通过编程手段将地址对象绑定到页面上的AddressUserControl控件上去,我们这样做,把每个用户控件的“DataContext”属性设成合适的运输或结帐数据模板实例:

最后一步是用声明的方式在 AddressUserControl.xaml 文件中加一个{Binding}语句,用来配置用户控件中的TextBox控件的Text属性和绑定到用户控件上的Address数据模型对象的属性间的双向数据绑定关系。

当我们点击F5运行应用时,我们将得到Address数据模型对象与AddressUserControl的自动数据绑定:

因为我们将{Binding}声明设置成了“Mode=TwoWay”,用户在文本框中做的改动会自动地推送到Address数据模型对象中去(不用写任何代码就可实现)。

例如,我们可以将浏览器中原先的运输地址改成送到迪斯尼:

假如我们在Save按钮的Click事件处理函数中加一个断点,然后点击按钮的话,我们可以看到上面的文本框的变动是如何自动反映到我们的“_shippingAddress”数据模型对象的:

然后我们可以实现 SaveBtn_Click 事件处理函数,将运输和结帐Address数据模型对象按我们的方式持久化,而不用手工获取或对页面上的UI控件做什么操作。

WPF和Silverlight支持的这个干净的视图/模型分离使得后期改动地址用户控件极其容易,且不必更新页面中的任何代码,它还使得轻松地对功能进行单元测试成为可能(请阅读我最新的贴子了解Silverlight单元测试的详情)。

结语

WPF和Silverlight方便你将UI功能封装进控件,它们支持的用户控件机制就提供了一个非常容易的方式。用户控件与数据绑定的结合促成了一些很好的视图/模型分离场景,允许你在操作数据时编写非常干净的代码。

如果你想在自己的机器上运行的话,你可以在这里下载上面例程的完整版本。

想进一步了解Silverlight和WPF的话,请参阅我的Silverlight教程和链接网页。 我还高度推荐Karen Corby在MIX08上做的精彩讲座(讨论了用户控件,自定义控件,样式化,控件模板等),你可以在这里免费在线观看该讲座。

希望本文对你有所帮助,

Scott

posted on 2008-04-05 08:12:08 by scottgu  评论(0) 阅读(8548)

使用Expression Blend开发Silverlight 2应用 -- 初览

【原文地址】First Look at Using Expression Blend with Silverlight 2
【原文发表日期】 Thursday, February 28, 2008 9:36 PM

上个星期,我写了一个《Silverlight 2 初览》的贴子,讨论即将发布的Silverlight 2 Beta1 版。在该贴子里,我给出了一些我撰写的系列教程的链接,这些教程示范了Silverlight和WPF后面的一些根本性编程概念,以及演示如何使用它们来建造一个Silverlight版的“Digg搜索客户端”应用:

在这第一套Silverlight教程里,我没有使用可视化的设计工具来建造用户界面,而是注重于展示底层的XAML UI标识(我认为这有助于更好地解释核心编程概念)。既然我们完成了对基本概念的讨论,让我们来探究一下可为我们所用,变得更有效率的一些工具。

Expression Blend对Silverlight的支持

除了即将发布Silverlight 2的Beta1版本外,我们还将发布针对这个版本的Visual Studio 2008 和 Expression Studio 的工具支持。这些工具将为建造RIA应用提供强有力的支持,是设计来允许开发人员和设计师轻松地合作开发项目的。

在今天的贴子里,我将介绍即将发布的Expression Blend 2.5三月份预览版的一些功能。在演示关于Blend是如何工作的一些基础的东西之后,我们将用它来建造一个跨平台,跨浏览器的 Silverlight IM聊天客户端:

上面的屏幕截图展示了在MAC上运行时该应用的样子,下面是在Expression Blend中该应用设计时的屏幕截图:

我们将使用Expression Blend,用可视化方法构造该应用所有的用户界面,以及使用它来干净地将UI数据绑定到代表我们的聊天会话和消息的.NET类上。

我们用来建造聊天应用的所有控件都是Silverlight 2的Beta1版的一部分。

声明:我不是设计师(也不很酷)

让我预先声明,我是个开发人员,不是个设计师。我也不是很酷。虽然我理解创建用户界面的技术,但在组合界面时,我有时会挑选很差的颜色和字体(就在我弄完本贴的屏幕截图之后,有个同事十分有助地指出,实际上有个致力于取缔我使用的一些字体和颜色的专门网站,哎,很受打击)。

我想对你们中那些有艺术细胞的人说,请对我温柔点,将你的注意力集中在我在下面演示的功能和技术上,别针对我使用的字体和颜色选择, :-)

起步: 创建一个新Silverlight 2项目

Expression Blend 和 Visual Studio 2008共享同样的解决方案/项目文件格式,这意味着你可以在VS 2008中创建新的Silverlight 项目,然后在Expression Blend 中打开,或者你也可以在Expression Blend 创建新的Silverlight 项目,然后在VS中打开。你还可以使用Expression Blend和VS 2008同时打开和编辑同个项目。

因为在我先前的Silverlight教程系列中,我已经展示了如何使用VS 2008来创建一个新Silverlight项目,让我们用这个贴子来展示如何使用Expression Blend来创建一个新的Silverlight应用。要做的话,只要在Expression Blend中选择 文件->新项目 ,选择Silverlight 2 Application图案,然后点击OK:

这会创建一个新的(与VS相兼容的)解决方案文件和Silverlight应用项目:

Blend包括了一个面向Silverlight 2应用的完整的所见即所得的设计器。在打开Silverlight页面和控件时,你可以在设计视图,XAML源码视图,或者同时显示设计视图和XAML源码视图的分割视图之间转换设计表面(支持同步编辑)。在上面我们使用了分割视图这个选项。

理解一些基本的东西:往表面上加控件

Expression Blend拥有一个与Visual Studio稍微不同的工具调色板(tool palette)(与你在像Photoshop这样的设计工具里的找到的调色板更相似些)。

Blend支持矢量图像编辑:

Blend还支持添加和操作控件。在放置布局控件(Grid, Stack, Canvas, Border, ScrollViewer等),文本控件(TextBox, TextBlock等)的工具箱中,有个特殊的图案,以及一个显示你最近用过的控件的图案:

点击工具调色板上最后面的">>"图案会显示可为你所用的所有的控件:

确认点击了Asset Library的右上角的“Show All(显示所有控件)”的复选框,如果你看不到你在找的控件的话。你还可以使用“搜索”文本框,来按名称过滤所显示的控件。

重要注意事项: Blend对所有控件都支持一种设计体验(无论是内置的控件还是第三方的控件或你应用引用的用户控件)。

在你从工具箱里选中一个控件后,你可以在设计表面点击,拖拉,画出控件来。你也可以把控件从asset工具拖拉到artboard上。在默认情形下,当你在设计表面上添加控件,与之交互时,你将得到自动的尺子和定位标记 (下面是一个带有内置按钮,日历和slider控件的表单):

理解其他基本的东西:操作控件属性

你可以在设计表面上选择任何对象,然后在屏幕的右手边点击“属性”面板,来定制它的属性:

 

在上面,我在把按钮的“背景”画刷改成渐变的深蓝(deeper blue gradient)(在“Brushes(画刷)”节点下面用红笔圈中的第三片,它允许我们配置渐变式的画刷)。

有用的小技巧: 属性窗口的上方包含一个搜索框,你可以用它来过滤可见的属性名称:

因为Silverlight和WPF中所有的UI对象都是使用矢量图像组成的,我们可以任何方式对控件进行变形,样式化,转换。例如,我们可以设置我们的按钮控件的Transform属性或者点击它的边角来旋转,倾斜,扩缩它:

这给与我们很大的威力和灵活性,来快速和轻松地定制我们想要的体验:

有用的小技巧: 你可以按住CTRL键来放大或缩小设计表面,然后使用你的鼠标的滑轮来控制放缩的深度。然后你可以通过按住空格键来移动设计表面的可见区域,这会导致手形光标的显示,然后你可以按住鼠标,用它来把当前可见的区域在屏幕上拖拉。后面这个小技巧在你放大得太多,想轻松地移动可见内容时会非常有用。

建造我们的聊天应用: 定义布局

在我先前的Silverlight教程系列中的第二部分:使用布局管理 (木野狐译)中,我曾谈到Silverlight和WPF中的布局管理系统,以及如何使用布局面板来轻松地控制应用的布局和流程。Expression Blend可以使得定义布局规则变得容易,还包括使用这些布局面板的内置工具支持。

记住,我们建造聊天应用的目标是拥有象这样的UI:

要达成这个目标,我们先在网页上定义三行的<grid>布局,我们可以这么做,把鼠标悬浮在设计表面的左边缘,然后点击我们想生成新的行定义的地方(在下图中,我已经建立了顶行的定义,用红笔圈出的光标所在表示我将点击来添加第二行定义的地方):

点击设计表面的左上角(下图红圈处)允许我们转换设计表面是处于 Canvas 布局模式还是Grid布局模式:

在Grid布局模式中时,Blend 会告诉我们某个行或某个列是否有固定的宽度,或是否与控件的尺寸成比例关系。上面的“空锁(empty locks)”表示这三行之间目前成比例关系(意味着它们会按比较增加,如果我们加大浏览器的大小的话):

如果我们点击顶部和底部的锁的话,我们可以把这些行设置成拥有固定的高度,而让中间一行填充剩下的高度:

我们要做的最后一步是点击顶部的边缘,再定义一个右手的列,我们将其设置成拥有固定的宽度(让左边那列动态地改变大小):

在做完上面的步骤之后,我们的XAML文件将有一个定义成下面这样的Grid:

有用的小技巧: 在上面,我们对我们的Silverlight应用设置了固定的宽度和高度(注意<UserControl>根元素上的Width 和 Height属性)。我们也可以完全去掉Width和Height属性,致使应用拥有动态的大小,自动地流式改变大小来适合包含它的HTML元素或浏览器窗口的大小。(我曾在这里的教程的结尾谈到过这个技巧)。如果我们要给我们的应用设置设计时的宽度和高度,我们可以在根UserControl元素上设置 d:DesignWidth="640" 和 d:DesignHeight="476" 属性。这会在使用设计器来设计应用时,致使设计器使用该尺寸的大小。

建造我们的聊天应用: 添加控件和颜色

至此,我们定义了我们的聊天应用的核心布局,让我们往里面加些控件,开始定制它的外观。

我们将先选择根Grid布局面板,定制它的背景颜色为渐变的蓝色(blue gradient)。可为我们所用,选择一个特定控件的一个简单的方法是使用“Interaction(交互)”面板,然后点击我们想选择的控件:

然后我们可以使用“"Brushes(画刷)”属性面板来定制一个蓝色的 LinearGradient 画刷为Grid的背景:

设置完成后,我们可以开始操作聊天窗口的底部,加一个“Send”(发送)按钮:

至于我们的聊天消息文本框,我们则将使用一个标准的文本框。但要加点活力,我们将先加一个RoundRadius为5的边框控件,然后加象这样的Background(背景)和BorderBrush(边框画刷):

然后我们在Border控件中嵌入我们的TextBox。

重要的小技巧: 为使用设计表面把TextBox嵌套在Border控件之中,我们需要在Interaction窗口中双击Border控件。这会将其设置成设计表面上的当前可插入控件,象下面这样用黄色高亮显示:

然后我们可以使用控件工具箱选择一个TextBox控件,将其加Border控件。我们将设置TextBox的背景和边框画刷从父控件Border处继承其好看的曲线型外观:

 

Blend生成的XAML标识看上去象这样(注意,TextBox是内嵌在Border控件之中的,如果Border不是当前插入控件的话,是不会这样的):

我们也可以对header行重复上面的过程,将一个TextBox嵌入一个Border控件中,在右列里加一个图片控件,创建出象这样的UI:

 

由Blend生成的XAML标识会看上去象下面这样:

最后,绝对不是最不重要,我们将在中间一行添加另一个Border控件,往其中加一个ListBox控件。我们将配置Border控件延伸跨越Grid的两列,将它的背景和前景颜色进行定制。然后我们在ListBox加一些测试消息作为站位文字(我们将在后面对UI进行定制,并将其绑定到实际数值):

由Blend生成的XAML标识将看上去象下面这样:

 

至此,我们运行应用的话,我们会有一个在浏览器中运行的基本的聊天IM客户端(带硬写的值)。在我们改变浏览器大小时,应用会自动流动,改变大小以适合窗口:

我们还有一堆UI活要干,使我们的IM客户端看上去不至于很粗糙,但至少我们现在有东西可以运行了。

建造我们的聊天应用: 添加ChatMessage和ChatSession 2个类

至此,我们在Expression Blend中创建了初始的UI,让我们在 Visual Studio 中打开同个项目,加些我们可以绑定到UI的一些聊天类。

我们可以在 Visual Studio中选择 VS 2008 中的文件->打开项目,然后选择我们项目的项目文件来打开项目,或者在Expression Blend中我们可以右击项目节点,然后选“Edit in Visual Studio(在Visual Studio中编辑)”菜单项来启动打开了项目的VS 2008:

Beta1版本中的VS 2008的Silvelight支持包括对Silverlight 2方案的项目管理支持,完整的Intellisense和事件连接支持,以及对在Windows和Mac上运行的Silverlight应用的调试支持。VS 2008还支持对Silverlight .xaml文件的分割视图的编辑。譬如,下面是我们在Blend 建造的同个Page.xaml 文件,在VS2008中打开后的样子:

Beta1版的VS 2008设计视图并不是可交互的(意味着还是只读)。但你在源码视图中做的变动会马上在设计视图中更新,这给予你一个很好的XAML-pad的体验(在Silverlight 2 Beta1中,VS 2008支持完整的XAML源码intellisense)。

在这个博客贴子里,我们不会使用Visual Studio的XAML编辑器,而是将创建一些类,我们可以用来代表ChatSession以及相关的聊天消息。然后我们将使用Expression Blend将我们的UI控件绑定到这些类上。

我们先加一个定义了2个公开属性的叫“ChatMessage”的新类:

然后我们将创建一个叫“ChatSession”的类,它代表了一个聊天会话:

上面的ChatSession类有三个公开的属性,前2个属性代表远程聊天对象的用户名和avatar。

第三个属性是过去聊天消息的集合。注意,它的类型不是List<ChatMessage>集合,而是一个ObservableCollection<ChatMessage>集合。ObservableCollection对你来说,也许是个不熟悉的类型,假如你来自ASP.NET背景的话,但对那些来自Windows Forms或WPF背景的,大概会非常熟悉。基本上来说,这是个泛型集合类,往其中添加或去除条目时(或者其中的条目实现了INotifyPropertyChanged的话,在属性变动时),它会发出变化通知事件。这在做数据绑定时会非常方便,因为UI控件可以使用这些通知来知道自动刷新它们的值,而不用开发人员编写代码来显式地这么做。

ChatSession 还有2个公开的方法,其中一个方法的任务是连接到聊天服务器上去,另一个方法的任务是向聊天服务器发送消息。为简单起见(也因为我没有聊天服务器),我会对2个方法做假的实现。在实战中,我们大概会使用内置于Silverlight的网络socket实现连接到一个远程的聊天服务器上去。

ChatSession类实现了INotifyPropertyChanged接口,意味着它会呈示一个公开的PropertyChanged事件。在这个类中,我们会在改变它的属性时,触发这个事件。这会在属性值发生变化时,通知监听者(例如,与它数据绑定的控件),以允许它们重新绑定数据。

为设计时数据绑定实现假的数据

从纯粹功能性的角度来说,上面的代码是为实现我们的聊天客户端所需的所有的代码。但为帮着改进在Blend中的设计时体验,我们还将加一个构造器,检查我们是处于运行时模式还是设计模式,如果宿主于设计器里,那么就给ChatSession装载假的数据:

一会儿我们就会看到这是如何方便在设计器里呈现数据绑定之数据的。

建造我们的聊天应用: 在Expression Blend中使用数据绑定连接UI

既然我们定义了ChatMessage和ChatSession对象,我们可以在Expression Blend 中用它们来绑定到我们的UI控件了。

在我上个星期的《教程第五部分:用 ListBox 和 DataBinding 显示列表数据》 (木野狐译)中,我介绍了Silverlight和WPF中数据绑定的工作原理。在今天的贴子里,我们将使用Expression Blend 来连接数据绑定表达式,而不是手工输入这些表达式。我们将先使用Blend中Project面板下的"Data"面板:

我们将点击Data面板中的“+ CLR Object”链接,调出一个对话框,允许我们挑选任何.NET对象来数据绑定到我们的UI控件。我们将用它来选择我们刚创建的“ChatSession”对象:

这会把ChatSession对象加到我们的Data托盘上去,将它的属性(以及子属性)显示在一个树形视图里:

然后我们就可以在设计视图里通过选择Data托盘里的这些属性,把它们拖放到设计表面上的UI控件上,来绑定任意一个UI控件到这些属性上。例如,我们可以把RemoteUserName属性从Data托盘上拖拉到静态的"ScottGu"标签上,将它换成{Binding RemoteUserName} 数据绑定表达式:

当我们把“RemoteUserName”属性拖放到TextBlock上时,Blend会象上面那样问我们,是绑定这个属性到现有的TextBlock,还是创建一个新的控件来代表这个属性。如果我们选择默认的行为(绑定到现有的控件上),Blend就会询问我们想要的绑定表达式的类型:

我们表明我们要“OneWay(单程)”绑定到TextBlock的“Text”属性上去。当我们点击OK时,我们的控件的“Text”属性就会被更新为 {Binding RemoteUserName} 表达式。

我们可以重复这个拖放交互过程,把Image控件绑定到RemoteAvatarUrl 属性,也把 ListBox 绑定到MessageHistory集合属性上。完成之后,Blend就会象下面这样在设计视图表面中显示我们的伪数据:

你也许会对ListBox的内容感到疑惑,为什么条目都显示成了“ChatClient.ChatMessage”?那个么,目前ListBox是绑定到了自定义的.NET 对象的集合,“ChatClient.ChatMessage”字符串是调用ChatMessage实例的“ToString()”方法返回的值。

我们可以象这样,加一个<DataTemplate>到ListBox来修改它,让它好看些:

注: 在Blend 2.5 三月份的预览版中,你只能在源码视图中定义数据模板。在将来的预览版中,你将能够使用设计器来定义它们。这个功能已经在WPF中实现,如果你想试验一下的话。作为一个设计师,你可以交互式地创建数据的外观,完全的所见即所得的体验。去创建一个WPF项目试一下。

这么做的结果,会使得我们的UI在设计时看起来象下面这样:

在设计时显示这些“伪数据”的好处是,它允许我们对在运行时UI体验是什么样的会有一个比较好的感觉,允许设计师(或开发人员)轻松地设计UI,而不需要等待应用的其他部分的完成。

建造我们的聊天应用: 使用样式和控件模板更新我们的Button和ListBox的UI

在我的《第七部分:使用控件模板定制控件的观感 》Digg教程中谈到的一件事情是,关于Silverlight和WPF如何允许开发人员和设计师完全定制控件的观感(look and feel )的。这提供了巨大的灵活性来精雕细琢应用的UI,以创建恰如其愿的用户体验。

我们可以使用Silverlight和WPF的控件模板特性来定制我们上面聊天应用的Send按钮和ListBox结构,以构造稍微好看的观感。我们可以这么做,创建 "MessageHistory" 和 "SendButton" 样式资源,将之保存在项目的App.xaml文件中。每个样式对象可以有一个控件模板,修改了控件的观感和改变它的视觉结构。

注: 在Blend 2.5 三月份的预览版中,你只能在源码视图中定义数据模板。在将来的预览版中,你将能够使用设计器来定义它们。这个功能已经在WPF中实现,如果你想试验一下的话。作为一个设计师,你可以交互式地创建数据的外观,完全的所见即所得的体验。去创建一个WPF项目试一下。  

例如,下面的ListBox控件模板可以用来去除ListBox控件周围的外圈双边框,定义一个只有列表容器卷动条的“平(flat)”的外观:

 

将这个模板施用到我们的ListBox上,将使得它显示出边缘周围平滑很多的样子:

我们可以用我们按钮的控件模板做得很花哨些,不光是定义一个自定义的按钮形状,还可以定义各种故事板动画来用于该形状,在它处于"MouseOver(悬浮)", "Pressed(按下)", 或"Normal(正常)"状态时, 提供自定义的UI行为(所有这些东西都可以封装在Style定义之中,意味着页面的开发人员不用做什么就可以启用这些东西):

在定义了"MessageHistory" 和"SendButton" 样式对象之后,很容易使用Expression Blend 将它们施用到设计表面的控件之上。

点击Expression Blend中的“Resources”工具窗口,它会列出我们项目中的所有资源地点:

我们可以展开“App.xaml”节点看其中我们可以使用的样式。要将一个特定样式施用到页面上的某个控件,我们只要将它拖放到该控件上就可以了。例如,这是在我们施用“SendButton”样式之前我们的发送按钮控件的样子:

将SendButton样式拖放到它之上,会将它改成使用我们自定义的控件模板形状/结构

因为我们的“SendButton”样式中定义了状态动画效果,按钮在运行时会随终端用户与之交互的方式的不同而变化。

在默认情形下,按钮看上去象这样:

当终端用户将鼠标移到按钮之上时,气球会微妙地变到比较淡的颜色:

在处于按下的状态时,按钮会陷下去,它的影子会消失:

在释放时,按钮又会冒起来。

这些微妙的动画和交互性姿态可以给应用增添一些色彩。最棒的是,设计师可以完全由他们自己建造和定制这些功能,实现页面功能的开发人员根本不用参与也不用编写任何代码,就可以启用这些功能。

在Expression Blend 2.5的将来的预览版中,设计师将不光能定义这个按钮的形状和结构,还能为它定义所有的动画过渡,全部使用设计表面(不需要编辑源码,也不用任何代码)。

实现我们的聊天功能

至此,我们使用Expression Blend对我们的控件UI做了数据绑定,还对UI的交互性做了修改和润色,让我们回到Visual Studio,来编写实现UI聊天行为功能的代码。

特别地,我们将向我们Page的构造器里添加下列代码,来开始与一个远程用户的ChatSession,然后处理“Send”按钮被点击,给远程用户发送一个消息时的场景:

在添加完上面的代码之后,重新运行我们的应用,我们将看到我们的UI现在数据绑定到了一个与RemoteUserName为"ScottGu" 的ChatSession(聊天会话),而不是我们早先定义的假的设计时数据。在消息文本框里输入文字,点击定制的Send按钮时,我们的ListBox会自动显示更新过的聊天历史:

 

你也许在疑惑为什么ListBox会自动更新?它这么做的原因是因为ListBox是数据绑定到ChatSession.MessageHistory属性上的,该属性的类型是ObservableCollection<ChatMessage>。这意味着,在一个新的 ChatMessage 对象添加进来时,该集合会自动触发变化通知事件,ListBox就会监测到这个事件,然后就会用新的数据更新本身。

不需要我们编写代码,就可以让ListBox对这些变化做反应。我们应用的干净的视图/模型绑定架构会自动为我们做处理。

结语

我只展示了Expression Blend支持的几个特性而已,所有这些特性在Silverlight和WPF项目中都工作的。所有这些功能都将在即将发布的Expression Blend 2.5三月份预览版中发布,不久这个预览版就可(免费)下载。

我想你会发现Visual Studio 2008 和 Expression Studio 会给建造出色的RIA解决方案带来巨大的生产力和威力。开发人员和设计师可以在开发相同项目时协作使用它们(而不用相互妨碍对方)。你还可以轻松地在一个机器上同时打开它们,用它们来同时编辑同一个应用。

在Expression Blend可以下载之后,我将在博客中对它做更多的讨论(以及我还没讨论过的其他一堆特性)。我还将在Silverlight 2 Beta1版发布之后,把上面的例程提供下载,这么你可以自己打开和运行其代码了。

希望本文对你有所帮助,

Scott

posted on 2008-03-02 16:28:35 by scottgu  评论(6) 阅读(20647)

.NET 3.5 客户端产品路线图

【原文地址】.NET 3.5 Client Product Roadmap
【原文发表日期】 Tuesday, February 19, 2008 11:57 AM

几个月前,我写过一个 .NET Web 产品路线图的博客贴子,在其中,我概括描绘了我们准备在刚发布的Visual Studio 2008 和 .NET 3.5中的web开发特性的基础之上开发的一些产品计划。

在下几个月内,我们还将发布若干个特定于客户端开发的增强功能。我们花了很大的力气来解决客户反馈中一些最大的要求,同时还尝试着把开发人员在开发Windows应用时能够拥有的能力推向极限。所有这些改进都是建立在VS 2008 和 .NET 3.5之上的,势将使得今后的.NET 客户端开发更上一层楼。下面是我们计划在下几个月内推出的一些改进的路线图:

改进客户端应用所需的.NET 框架的安装

过去的几年从建造客户端应用的客户和ISVs反馈来的一个最大的要求是,使得.NET 框架的安装和配置更加容易,速度更快。

这个夏天,我们将发布一个.NET的新安装框架(setup framework),方便建造优化的客户端应用的安装包。这个安装框架可以与现有的安装框架集成(譬如,象InstallShield这样的产品),促成更小,更快的终端用户.NET框架的安装体验。

Windows Forms和WPF客户端应用将能够使用这个安装框架干净地把.NET框架bootstrap安装到机器上去。这个bootstrap安装工具将支持自动下载机器上运行.NET 3.5 客户端应用所需的最小.NET 框架包部分。例如,一个用户已经在机器上安装了 .NET 2.0,这个安装程序就会很聪明地自动下载那些把 .NET 2.0更新到3.5 所需的升级补丁(而不用重新下载已经由.NET 2.0提供的组件)。这可以显著地缩小客户端安装程序的payload大小,加速安装体验。

我们还将对基于MSI和ClickOnce的解决方案提供改进以促成集成的应用安装体验,支持容易建造的对消费者更为友好的用户体验。

改进.NET客户端应用的内存需求和启动性能

我们收到的另外一个常见的要求是,允许.NET客户端应用在“冷启动”场景下更快地启动。“冷启动”场景是指没有其他.NET客户端应用目前正在或刚在机器上运行过,需要OS从硬盘上装载很多页的东西(代码,静态数据,注册表等)。如果你在装载一个很大的.NET客户端程序或库,或者使用比较慢的硬盘,那么这些冷启动场景会需要很多秒钟才能启动你的应用。

这个夏天,我们将发布一个CLR的服务包, 将在数据结构优化方面做一些显著的内部优化,以在装载和运行应用时减少硬盘IO以及改进内存布局。此外,这项工作将显著改进 .NET 2.0, 3.0和3.5应用的内存需求和冷启动性能,将极大地改进终端用户使用基于.NET客户端应用的体验。

取决于应用的大小,我们预期.NET应用将实现25-40%间冷启动性能的改进。为利用这些改进,应用不需要改动任何代码,也不需要重新编译,好处是自动的。

WPF性能之改进

这个夏天,我们还计划发布一个WPF的服务包,内含一堆性能优化,将改进文本,图像,媒体和数据等方面的性能。这些改进包括:

- 把DropShadow和Blur位图效果从目前的软件显示转到硬件加速(使效果快上好几倍)。这些效果的API跟现在的一样(这意味着你不用改动任何代码或重新编译你的应用就可利用这些改进)。

- 文本场景,特别在用在Visual 和 DrawingBrush 场景时,将会显著地块。这些场景的API跟现在一样(这意味着你不用改动任何代码或重新编译就可利用这些性能改进)。

- 媒体和视频性能场景也将快得多(也意味着不用改动任何代码或重新编译就可利用这些改进)。

- 我们将包括一个新的WriteableBitmap API,允许软件表面的实时位图更新。我们还将添加对一个强大的新效果API的支持,该API允许你构建更丰富的图像场景。

- 我们还将包括可在数据编辑场景中利用的新数据扩缩性方面的改进。这些包括容器回收和数据虚拟化支持,将方便构建丰富的数据视觉化控件。

WPF控件之改进

今年稍后,我们还计划发布若干新的WPF控件。我们正在开发的包括DataGrid, Ribbon 和 Calendar/DatePicker 控件。

VS 2008 WPF设计器之改进

我们还计划发布一个VS 2008服务包,内含WPF设计器的若干附加功能。这些功能包括属性网格内控件事件的事件页的支持,在源码模式下的工具箱支持,以及各种各样的其他常见要求和改进。

结语

上述的改进应该方便你建造美好的桌面应用。因为这些改进是建立在VS 2008 和 .NET 3.5之上的,它们应该很容易利用(在大多数场景下,不需做任何代码改动就可以利用)。请在以后的几周内静候我讨论上述每个改进细节的博客贴子。

希望本文对你有所帮助,

Scott

posted on 2008-02-21 12:08:00 by 开心就好  评论(5) 阅读(7625)

2月6日链接篇: ASP.NET, ASP.NET AJAX, Visual Studio, .NET, WPF

【原文地址】Feb 6th Links: ASP.NET, ASP.NET AJAX, Visual Studio, .NET, WPF
【原文发表日期】 Wednesday, February 06, 2008 12:41 AM

这是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页里我以前写的众多很受欢迎的文章的链接。

ASP.NET

ASP.NET AJAX

Visual Studio

.NET

WPF

希望本文对你有所帮助,

Scott

posted on 2008-02-06 23:58:00 by scottgu  评论(12) 阅读(11701)

MIX08

【原文地址】MIX08
【原文发表日期】 Thursday, January 31, 2008 9:38 PM

MIX是我们每年在拉斯维加斯举办的微软web开发大会。

MIX是个很好玩的大会,不光是因为它会涉及尖端的内容(我们用MIX07宣布了Silverlight计划),而且因为它往往会吸引各种各样的与会者(包括目前使用微软技术的人员,但也有很大百分比的与会者不使用微软技术)。大会的结构包括适当比例的讲座和研讨会,其布局和组织也是设计来促进精诚对话的。

今年的MIX将于3月5日至7日在拉斯维加斯举行。Ray Ozzie和我将在第一天的活动中做主题演讲,Steve Ballmer和Guy Kawasaki将在第二天的活动中做主题演讲。

本次大会(特别是我的主题演讲)将涉及很多新的web技术。与会者能参加的讲座内容将涉及:

Channel 9 最近对我做了采访,在其中我讨论了一些新技术。在第一部分中,我讨论了IIS7,在第二部分中,我讨论了ASP.NET, WPF 和 Silverlight 2。

赶紧登记,否则你会失去机会

跟我们一些大的活动,象TechEd和PDC相比,MIX是在一个比较小的场地举行的。这给与大会一种更亲密的感觉(所以好玩),但也意味着,它每年的席位都销售一空,一旦售完,就真的没位子了。

去年,我大概收到了50个电邮,都是在满席之后求入场券的,还有许多人飞到了地方,希望能在门口设法进入会场(但很不幸地被告知他们无法入场)。不幸的是,因为场地所限(火警规定的限制),在席位销售完之后,真的无法再卖更多的入场券。甚至我自己团队的成员,如果没有及时登记的话,也会被打发走的。

今年的登记席位比以往的任何一次MIX大会卖得都要快。如果你想参加的话,我建议你赶紧登记,以确保你可以去。你可以在这里了解该活动的详情,以及在线登记。

希望在那里能见到你们中的一些人 - 这个大会将会非常好玩....

Scott

posted on 2008-02-01 23:36:00 by scottgu  评论(4) 阅读(7202)

12月16日链接篇: ASP.NET, ASP.NET AJAX, ASP.NET MVC, VS, .NET, IIS7, WPF

【原文地址】December 16th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, VS, .NET, IIS7, WPF
【原文发表日期】Sunday, December 16, 2007 11:29 PM

这是我的链接系列的最新篇。也请参阅我的ASP.NET 技巧,诀窍和教程网页里 我以前写的众多很受欢迎的文章的链接。

ASP.NET

ASP.NET AJAX

ASP.NET MVC

Visual Studio

调试.NET

IIS 7.0

WPF

希望本文对你有所帮助,

Scott

posted on 2007-12-18 00:22:00 by scottgu  评论(4) 阅读(8500)

【第1页/共2页,15条】
首页
前页
1