在上一篇我們介紹了如何在WPF 4 中開發Windows 7 捷徑清單,本篇將繼續針對WPF 4 中工作列其他功能:覆蓋表徵圖(Overlay Icon)、進度條(Progress Bar)、縮圖工具列(Thumbnail Toolbar)進行研究。對於這些功能的API 開發可參考《Windows 7 工作列開發系列匯總》。
TaskbarItemInfo
在System.Windows.Shell 命名空間中,TaskbarItemInfo 類包含的上述所有Windows 7 工作列開發功能,通過它我們可以自訂軟體工作列的各種功能,其類成員可參考:TaskbarItemInfo Members。
ThumbButtonInfo
同樣在System.Windows.Shell 命名空間中,ThumbButtonInfo 類為我們提供了開發縮圖工具列的功能,其類成員可參考:ThumbButtonInfo Members,使用方式在下文中將會介紹。
覆蓋表徵圖(Overlay Icon)
通過API 開發Overlay Icon 時,需要簡單調用SetOverlayIcon 方法即可。在WPF 4 中開發仍然很簡單,只需在XAML 中為TaskbarItemInfo 類的Overlay 屬性賦上Icon 值便可實現,如下代碼所示:
<Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico" Description="Taskbar Items Sample"> </TaskbarItemInfo></Window.TaskbarItemInfo>
這樣就在程式表徵圖上增加了一個“問號表徵圖”:
縮圖工具列(Thumbnail Toolbar)
下面我們為程式增添一個縮圖工具列,向其中加入盾牌按鍵(Safe.ico),點擊後便更換掉的“問號表徵圖”。首先在前面代碼的基礎上增加ThumbButtonInfo 內容為工具列裝載按鍵:
<Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico" Description="Taskbar Items Sample"> <TaskbarItemInfo.ThumbButtonInfos> <ThumbButtonInfo x:Name="changeIcon"
DismissWhenClicked="True" Click="changeIcon_Click" Description="Change overlay icon" ImageSource="Resources/Safe.ico"/> </TaskbarItemInfo.ThumbButtonInfos> </TaskbarItemInfo></Window.TaskbarItemInfo>
在代碼中DismissWhenClicked 的作用是決定點擊按鍵後縮圖視窗是否關閉(預設為False);Description 為按鍵描述;ImageSource 為按鍵表徵圖;Click 點擊時會觸發相應事件。下面代碼即為點擊後觸發的changeIcon_Click 事件:
private ImageSource IconToBitmapSource(Icon img) { Bitmap bitmap = img.ToBitmap(); IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource bitmapSource = Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); return bitmapSource;}private void changeIcon_Click(object sender, EventArgs e){ taskBar.Overlay = IconToBitmapSource(Win7TaskbarDemo.Properties.Resources.Safe); }
代碼中IconToBitmapSource 是將System.Drawing.Icon 轉換為System.Windows.Media.ImageSource 的函數,可將程式中的Icon 圖片轉化為ImageSource 賦值給Overlay 使用。如果想取消Overlay 表徵圖,就將taskBar.Overlay 設為null。可見對於Overlay 的替換也是十分簡便的。
運行效果 點擊後效果
進度條(Progress Bar)
在WPF 4 中工作列進度條狀態仍然是五種(如下表所示)。為了改變工作列進度條狀態,我們再往縮圖工具列中加入一個按鍵,使其在點擊時改變進度條顏色。
<Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="taskBar" Overlay="Resources/Question.ico" Description="Taskbar Items Sample"> <TaskbarItemInfo.ThumbButtonInfos> <ThumbButtonInfoCollection> <ThumbButtonInfo x:Name="changeIcon" DismissWhenClicked="True" Click="changeIcon_Click" Description="Change overlay icon" ImageSource="Resources/Safe.ico"/> <ThumbButtonInfo x:Name="progressState" DismissWhenClicked="False" Click="progressState_Click" Description="Change progress state" ImageSource="Resources/Error.ico"/> </ThumbButtonInfoCollection> </TaskbarItemInfo.ThumbButtonInfos> </TaskbarItemInfo></Window.TaskbarItemInfo>
為progressState_Click 事件增加一些內容,通過ProgressState 調整進度列狀態;用ProgressValue 設定進度值:
private void progressState_Click(object sender, EventArgs e){ taskBar.ProgressState = TaskbarItemProgressState.Error; taskBar.ProgressValue = 0.4;}
點擊前後的對比圖:
縮圖調整
在新WPF 4 中我們可以通過TaskbarItemInfo 的ThumbnailClipMargin 屬性來調整程式視窗在縮圖中顯示的內容。如所示,預設情況下縮圖會顯示程式視窗全貌。下面通過在XAML 中設定ThumbnailClipMargin 值使縮圖只顯示“Reset”按鍵部分。
<Window.TaskbarItemInfo> <TaskbarItemInfo x:Name="taskBar" ThumbnailClipMargin="120,90,120,40" Overlay="Resources/Question.ico" Description="Taskbar Items Sample" /></Window.TaskbarItemInfo>
:
至此,在WPF 4 中開發Windows 7 工作列的內容就介紹完了,後續將會介紹一些WPF 4 的其他新功能,敬請關注!下周的這個時候VS2010 就正式發布了,到時大家也可以親身的體驗一下~
參考資料
1. Windows 7 工作列開發系列匯總
http://www.cnblogs.com/gnielee/archive/2010/03/21/1691101.html
2. TaskbarItemInfo Class
http://msdn.microsoft.com/en-us/library/dd783827(v=VS.100).aspx
3. ThumbButtonInfo Class
http://msdn.microsoft.com/en-us/library/dd783604(v=VS.100).aspx
原始碼下載
Win7TaskbarDemo.VS2010.zip