VS 2010 和 .NET 4.0 系列之《WPF 4》篇

  • 24306
  • 0
  • 2011-07-02

摘要:VS 2010 和 .NET 4.0 系列之《WPF 4》篇

【原文位址】WPF 4 (VS 2010 and .NET 4.0 Series)
【原文發表日期】 Monday, October 26, 2009 11:11 PM

【除了寫部落格外,我現在使用Twitter發短貼和共享連結。你可以在Twitter上透過www.twitter.com/scottgu(@scottgu是我的twitter名)跟隨我。】

這是我針對即將發佈的VS 2010 和 .NET 4所撰寫的 文章系列的第十一篇。今天的部落格討論WPF 4。

WPF 4的改進

WPF (Windows Presentation Foundation)是.NET框架的核心元件之一,允許開發人員打造豐富並且與眾不同的Windows客戶端應用。WPF 4包含了在生產力,性能和功能方面的重大改進,特別是在控制項(Controls), XAML, 文字(Text), 圖形(Graphics), Windows 7 整合(多點觸控(multitouch), 任務欄整合等), 核心基礎(Core Fundamentals), 以及部署這幾個方面。 本文是我在接下來的幾個月裡介紹其中一些改進和新特性的若干個文章的第一篇。

不久我還將另寫專文討論VS 2010中的 WPF 和 Silverlight設計器中的一些重大進步,該設計器還包含了一堆改進。

控制項

image可用於打造富客戶端的控制項

WPF 4添加了各種新控制項,使得客戶端豐富的行業(line-of-business)應用的打造更加容易,也更快。新的也更豐富的控制項集包括了象DataGrid, DatePicker, 和 Calendar這樣的行業應用必備控制項。這些新控制項與它們在Silverlight中的對應控制項在API和行為方面99%的相容,允許開發人員透過在Silverlight和WPF實現間重用程式碼,在優化了工作流程的的同時,建立一個橫跨客戶端和web的一致的體驗。

訣竅袋(Bag'O Tricks)又回來了

我們還將發佈被稱為WPF訣竅袋(Bag'O Tricks)的8個額外的控制項的下載,它包括下列控制項:AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel。

Windows 7和Office Ribbon控制項

在WPF 4發佈之後不久,會推出一個新的WPF Ribbon控制項供下載。它包括針對Windows 7 和 Office的皮膚,以及為終端用戶所熟悉的所有的標準Ribbon特性,包括tab(頁籤)和 group(組),動態改變大小,快速存取工具列(quick access toolbar),應用選單,上下文相關頁籤(contextual tabs),鍵提示(key tips)等等。

image

WPF Ribbon是完全可擴充的,以滿足將來版本的設計指引的變化, 今天在這裡有一個包含有限特性集的CTP。

image圖形(GRAPHICS)

快取合成(Cached Composition)

WPF 4 以新的快取合成功能得到了大量的效能改進,它允許應用程式快取任意內容,包含了即時與完整互動控制,向量地圖等作為保存在視訊記憶體中的位元圖,當快取後,這些元素即可任意被轉換,動態化,操作並可套用效果,且不需要重新繪製被快取的內容。

這免去了CPU和GPU重新渲染內容的代價,而允許GPU直接從快取來做渲染。這個快取理解被更新了的「髒」區域(dirty region),因此,舉個例子來說,被快取的文字塊(textblock)中閃爍的光標,只需要在幀間重新渲染光標。甚至還有一個專門使用這些智慧快取的新Brush,實際上,就是一個性能超佳的的VisualBrush。

像素著色器(Pixel Shader)3的支援

WPF 4是建立在一個非常受歡迎的,最初是在 WPF 3.5 SP1中引進的著色器效果(ShaderEffect)支援之上的,允許應用程式使用像素著色器(Pixel Shader)的第三個版本來編寫效果(Effects)。像素著色器第三個版本的著色器模型較之第二個版本,顯著地更為先進,在支援的硬體上能允許更加引人入勝的效果。

LayoutRounding (佈局捨入)

WPF 4採用了UseLayoutRounding屬性,最初是在Silverlight 2中引進的。WPF的佈局引擎經常要計算亞像素的定位坐標,這會在定位於亞像素邊界的元素在多個物理像素上做平滑處理(anti-aliased,消除鋸齒)時,造成渲染假象(artifact)。

UseLayoutRounding會迫使佈局引擎將元素置於整數像素(whole pixel)邊界上,從而除去由這個問題導致的大部分渲染假象,預設生成更清晰分明的介面。

image 動畫緩動函數(Animation Easing Function)

不連續的,直線式和樣條曲線(spline)式動畫在WPF的以前版本中就支援,WPF 4引進了一個叫Easing Functions(緩動函數)的新概念,允許應用程式的作者使用動畫建立流暢的行為。其使用方式多種多樣,譬如,建立一個彈跳式(springy)行為,或者添加對動畫的預期等。緩動函數可以定制動畫從開始進行到結尾的方式,內建的緩動函數提供了很大範圍的行為,例如圓形的(circular),指數型的(exponential),有彈性的(elastic),反彈型的(bouncy)動畫行程等。其擴充性設計還允許應用程式的作者建立自訂的緩動函數來定義他們的動畫行程的方式。由於其之易用性,設計師可以毫不費力地建立自然流暢的動畫。

CleartypeHint

新的CleartypeHint附加屬性允許應用程式的作者能在許多原先是無法使用的場合啟用高品質的Cleartype文字渲染。這樣的場合包括分層視窗中的文字,VisualBrush, DrawingBrush, 和BitmapCacheBrush中的文字,以及任何中間的渲染對象的引入會導致灰度文字渲染的地方。

文字堆疊(TEXT STACK)

新的文字渲染堆疊(Text Rendering Stack)

WPF文字渲染堆疊(text rendering stack)已被完全替換掉了,這樣的變化帶來了文字渲染的清晰度,可配置性和對國際語言支援方面的顯著改進。現在,新的文字堆疊支援顯示優化的字元佈局,可生成可與Win32/GDI文字媲美的清晰度(sharpness):

image

WPF新的文字堆疊現在還支援顯式選擇鋸齒(aliased),灰度(grayscale)和ClearType渲染模式:

image

新的文字堆疊允許針對動態的或靜態的文字優化的文字提示和對齊(text hinting and snapping),此外,新的文字堆疊現在還支援內嵌位圖的字體,這允許以Win32用戶所習慣的清晰度(sharpness)來渲染許多東亞字體。

BindableRun

自WPF的最初發佈起來,Run.Text 一直是個普通的CLR屬性。這意味著,Run.Text 缺乏WPF依賴屬性 (Dependency Property) 系統的所有好處,最明顯的就是其繫結的能力。在WPF 4中,我們將 Run.Text 轉化成了依賴屬性,允許開發人員使用WPF提供的第一個可繫結的Run。這裡有更多細節。

自訂字典

WPF包含一個拼寫檢查器,在WPF 4之前,只使用OS提供的字典做輸入驗證之用。這對面向使用專用術語的特定行業的應用來說一直是個大問題,因為這些應用一直為拼寫錯誤報告所困擾。 WPF 4引進了一個API,允許應用程式往WPF用來檢查拼寫的字典中添加詞彙。這裡有更多細節。

 

選擇畫刷和插入符號游標畫刷

為允許對WPF應用的觀感(look and feel)做豐富的定制,開發人員現在還可以透過這2個簡單的屬性來改變用於繪製WPF文字選擇和插入符號游標(caret)的畫刷:SelectionBrushCaretBrush

image        image

imageWINDOWS 7 光芒四射

Windows 7的多點觸控(Multitouch)支援

隨著多點觸控輸入和操作處理支援的引進,WPF 4提供了一個極棒的方式,可在Windows 7中使你的客戶端應用大放光彩。多指輸入是透過WPF 4中現有的和新的輸入事件來呈示的,也有新的操作和慣性(inertia)事件可為開發人員所用。新的特性包括:

  • UIElement上的多點觸控操作,慣性(漫遊(Pan),縮放(Zoom)和旋轉(Rotate))事件
  • UIElement, UIElement3D 和 ContentElement上的原始多點觸控事件(提起(Up), 移動(Move), 按下(Down))
  • 多個捕捉支援多個活動控制項
  • 支援多點觸控漫遊的ScrollViewer增強
  • 觸摸設備的擴充性
  • 將來Surface SDK的相容性

Windows 7 Shell整合

WPF 4還向WPF開發人員呈示了若干個關鍵的Windows 7 新Shell特性。這些Shell特性能促成更豐富的整合用戶體驗。新的任務欄沒那麼擁擠了,一眼看去就能傳達更多的信息。Aero縮略圖支援用戶命令。跳轉列表(Jump list)給應用程式提供了對與上下文相關的啟動任務和文件的訪問。

WPF 4 整合了Windows 7 跳轉列表(Jump List)的功能,包括:image

  • 任務
  • 個項(Items)
  • 最近訪問和經常訪問列表整合
  • 自訂分類

Windows 7 任務欄整合,包括:

  • 進度條
  • 疊加圖示(Overlay Icon )
  • 支援命令的縮略圖按鈕
  • 描述文字的DWM縮略圖裁剪

在Windows 7中,任務欄被重新設計,變得不那麼擁擠了,以幫助用戶使用較少的點擊數來操作任務。WPF 4在XAML中提供了與Windows 7 任務欄的整合,允許應用程式使用圖示疊加,進度條,縮略圖工具列,縮略圖描述文字以及縮略圖裁剪, 透過應用的任務欄圖示向用戶披露有用的信息。

WPF 4 中還有一個新的TaskbarItemInfo類,呈示為一個依賴屬性。它包含了Windows 7中引進的所有的新任務欄特性。

image圖示疊加(Icon Overlays)

圖示疊加允許一個應用程式透過在它的任務欄按鈕的右下角顯示一個小的疊加圖示,向用戶傳達某些通知和狀態。

進度條(Progress Bars)

任務欄按鈕可以用來給用戶顯示簡單的進度信息,而不必讓用戶轉換到應用的視窗本身。進度條可以用來跟蹤文件拷貝,下載,安裝,媒介燒錄,以及任何需要花一段時間的其他操作。

縮圖工具列(Thumbnail Toolbars)

縮圖工具列提供了對一個應用程式中關鍵命令的訪問,而不必讓用戶復原或啟動視窗。 這個特性允許應用程式的作者將一個活動工具列控制項嵌入一個視窗的縮圖預覽中。 應用程式可以根據它當前的狀態的需要,顯示,啟用,禁止或隱藏縮圖工具列上的按鈕:

 

 ima<br />
ge

WPF核心

新的XAML/BAML語法分析器(Parser)引擎

WPF 4用建立在新的System.Xaml.dll之上的新的引擎換掉了XamlReader.Load(), BAML 載入, 控制項和 資料模板功能的實現。作為其中的一部分工作,我們修補了許多缺陷,做了很多功能方面的改進。XamlReader.Load()的用戶可以利用XAML2009中的若干新的語言特性,例如對泛型型別的支援。MarkupExtensions 和 TypeConverters 現在可以在對像圖建立過程中得到更多的服務,能促成更多的場景,例如對Root對象的訪問。透過使用System.Xaml.dll提供的許多新的底層API,用於分析和操作XAML的工具也將更加容易建立。

DLR的資料繫結支援

與CLR中的類不同,動態對象的成員是在運行時定義的。DynamicObject是.NET Framework 4中的一個新的抽像類,允許開發人員輕鬆地實現IDynamicMetaObjectProvider。隨著C#中由「dynamic」關鍵詞帶來的新DLR支援,我們預期一些類別庫的實現會轉到使用DynamicObject 和 IDynamicMetaObjectProvider,將其作為一種標準的方式來呈示運行時定義的對象屬性和成員。WPF 4對IDynamicMetaObjectProvider的資料繫結支援將允許使用自然屬性句法來訪問動態屬性。

這個特性將擴充WPF資料繫結引擎,將現有的屬性和索引器(indexer)資料繫結句法映射成對由IDynamicMetaObjectProvider提供的動態成員的訪問的支援。

視覺狀態管理器(VSM)

另一個支援WPF-Silverlight連續體的新特性是VisualStateManager(視覺狀態管理器),引進了一種簡單的新方式來將視覺狀態施加給控制項。這個機制提供了一種方式,透過提供將控制項邏輯映射到各自的起始和終止視覺狀態的方法,可以輕易地定制控制項的外觀(look)和行為(feel)。

image

VSM是非常靈活的,在於它能自動地生成各別狀態間的過渡性動畫,這樣,控制項的作者可以花較少的時間在編寫程式碼上,而花較多的時間在定義在控制項模板中的視覺狀態上。那意味著,VSM可以給予控制項作者輕鬆地互換控制項的外觀和行為的能力,VSM賦予了控制項作者一種方式,可以輕易地互換控制項在視覺上是如何回應用戶的交互的。這是被Expression Blend完全支援的。

 

HTML-XBAP 腳本互操作

WPF 4提供了XBAP和宿主HTML網頁(XBAP在其中是在一個HTML幀或IFRAME元素中載入的)中的腳本間的直接通訊手段。XBAP可以深入訪問HTML DOM,包括對內嵌在HTML網頁中的任何ActiveX控制項的訪問,以及對DOM事件的處理。

WPF呈示宿主幀的主要腳本對象,這是一個動態對象,代表了幀的window對像加上HTML網頁腳本中的任何自訂的腳本函數和全局變數。從這個主要腳本對象,一個應用程式可以直接叫用腳本函數或者 「點入(dot into)」 HTML DOM對像【譯註:因為是動態對象,你可以使用「對像1.屬性對像2.方法」的句法,是謂「dot into」】。這個功能可在部分信任的XBAP中以及在Internet Explorer 和 Firefox的所有支援版本下使用。

UIAutomation(介面自動化))虛擬化

WPF在過去的版本中還引進了虛擬化的控制項(virtualized controls),但從來沒有提供一個標準化的方式讓一個自動化客戶端與一個虛擬化的控制項作交互。WPF 4中加了兩個控制項模式,ItemsContainerPattern 和VirtualizedItemPattern,來支援對虛擬化了的元素的訪問和交互。ItemsContainerPattern可用來訪問虛擬化的控制項以及找到虛擬化的個項(item),而VirtualizedItemPattern則可用於實現虛擬化的個項。

SynchronizedInput模式

這是WPF 4中新加的另一個UIA(介面自動化)控制項模式,這個模式可為自動化客戶端用來跟蹤某個輸入事件是否被WPF框架導向到了正確的元素之上。這個模式有3個相關的自動化事件,即,InputReachedTargetEvent, InputReachedOtherElementEvent 和 InputDiscardedEvent,來表示輸入是在何處處理的。

客戶端部署

.NET Framework 4 的 Client Profile

為改進.NET Framework 4部署的大小,時間和總的體驗,現在提供了一個更精簡的 .NET 版本,是完整的.NET Framework 4 的一個子集,叫做.NET Framework 4 Client Profile。.NET Framework 4 Client Profile目前可重分發的大小是30MB左右,完整的Microsoft .NET Framework 4是Client Profile的純超集(superset)。

.NET Framework 4 Client Profile的目的是改進和幫助精簡客戶端應用的部署大小,部署時間,可靠性和總的部署體驗。Client Profile包含了大多數常見桌面客戶端應用(包括Windows Forms 和 WPF 應用)所需的功能,預期大多數客戶端應用的開發人員將會針對這個Client Profile,而不是完整的.NET Framework 4做開發。因為這個原因,大多數Visual Studio 2010 Beta 2 客戶端專案模板預設針對的是 .NET Framework 4 Beta 2 Client Profile。

與.NET Framework 3.5 SP1 Client Profile有所不同,.NET Framework 4 Client Profile中的一個重要增強是其對所有平台和作業系統的支援,包括那些完整的框架所支援的作業系統,像Windows Vista, Windows XP, Windows Servers 2003 和 2008, Windows 7 (所有作業系統同時支援x86和x64版本)。

你可以查看或改變你針對的框架版本,打開你的專案的屬性視窗,然後選擇 "Application"頁面,然後你可以改變「Target framework(針對的框架)」下拉框為完整的 .NET Framework或者.NET Client Profile。專案的「Publish」屬性頁面也允許你選擇ClickOnce部署所需的必備軟體(prerequisite)。 在Beta2中,VS 2010會根據你專案的主要針對目標自動選擇正確的profile(Client Profile版本或者完整版本):

image

上面同樣的必備軟體對話框會在你建立「安裝和部署」專案(在選單「添加新的專案」/「其他專案型別」下)時出現,NET4 Client Profile必備軟體項在這個情形下是預設選擇了的。

與NET 3.5 SP1 Client Profile相比,NET4 Client Profile中的增強

儘管「Client Profile」的概念並不新,是在.NET Framework 3.5 SP1中引進的,但.NET Framework 4 Client Profile包含了若干重要的改進:

 

 

.NET Framework 4 Client Profile (新)

.NET Framework 3.5 SP1 Client Profile

所支援的作業系統

支援所有為完整的.NET Framework所支援的平台和作業系統(除IA64 和W2K8中的伺服器核心角色外)

只支援沒有安裝任何.NET Framework版本的Windows XP 32-bit機器

(否則Client Profile安裝程式會悄悄地安裝完整的3.5 SP1框架)

轉散佈

支援轉散佈以及web下載

只支援web下載

新增/移除程式

完整的框架包括了 Client Profile 和另一個叫「擴充的(Extended)」部分,因此它在添加/刪除程式對話框(或者程式和特性視窗)中有2個項。

如果你安裝了完整的框架,你只要刪除「添加/刪除程式」列表中的「擴充」項,就可以轉到Client Profile。

「添加/刪除程式」列表中只有一項

Visual Studio

Visual Studio 2010中對針對的Client Profile改進了的支援

在預設情形下,許多 Visual Studio 2010 Beta2客戶端專案將針對NET4 Client Profile

.NET Framework 3.5專案的Visual Studio 2008 Service Pack 1 「Application」專案屬性頁上的一個復選框。原本VS 2008沒有Client Profile支援。

特性

包括新的.NET 4特性(例如 托管擴充性框架(Managed Extensibility Framework) (MEF), C# 4 dynamic 關鍵詞等等),以及以前包括在NET 3.5 SP1 完整版本中的特性(語音,WPF 拼寫檢查等等)

.NET 3.5 SP1 完整版本的特性子集

因為.NET 4.0是個可與.NET Framework以前的版本並列安裝的版本,.NET 4.0 Framework的安裝並不要求對機器上的先前.NET版本進行服務或安裝修補,這意味著.NET 4.0 Client Profile,比之於.NET 3.5 SP1 Client Profile,在機器上安裝起來會快很多。

完全信任的XBAP部署

從WPF 4開始,企業網域(Intranet Zone)和可信任域(Trusted Zone)中的XAML瀏覽器應用(XBAP)也啟用了ClickOnce的權限升高提示,方便了完全信任的XBAP的部署。針對那些需要安全權限超過企業網域(Intranet Zone)和可信任域(Trusted Zone)所提供的最低程式碼訪問安全(CAS)權限集的XBAP,用戶在瀏覽到這些XBAP時,能夠在ClickOnce權限升高提示中點擊"運行"按鈕,以允許XBAP以所要求的權限運行。

結語

你可以從上面看得出來,WPF 4.0中有一堆很棒的新功能。下面是幾個你可以去看一下的連結和資源,來進一步瞭解其中一些特性:

在接下來的幾個月裡,我將撰寫更多的文章,著重介紹一些WPF 4的新功能以及如何利用它們。我不久還將撰寫一個文章討論新的VS 2010 WPF 和 Silverlight設計器,這使得直接在Visual Studio 2010中使用一個可見即可得(WYSIWYG)設計器來打造精美的WPF 和 Silverlight應用成為可能。

希望本文對你有所幫助,

Scott

 

【譯註:由於譯者對WPF不甚精通,譯文肯定有不少不當之處,請千萬指正】