然后實(shí)現(xiàn)SplitButton的Click事件委托:
Code 6 - EventHandler for Click Event of Amazon Book SplitButton
好了,運(yùn)行插件看看效果:
圖 3 - Oops! The Value of ImageUrl is null
噢,拋了一個ArgumentNullException異常!還記得我是怎么處理ImageUrl嗎?在Code 5里,當(dāng)Amazon Web Service返回的搜索結(jié)果里面某本圖書沒有圖片時,BookSearch.GetImageUrl方法返回null,類似地,ImageManager.GetImage方法也應(yīng)該在遇到這種情況時返回一個"占位圖片":
Code 7 - New Version of GetImage Method
再次運(yùn)行插件,可以看到預(yù)期的效果了:
圖 4 - Search Results
連接經(jīng)典
終于輪到本回的主角出場了,當(dāng)用戶點(diǎn)擊搜索圖書窗口的Link按鈕時將在當(dāng)前文檔的光標(biāo)處插入選定圖書的超鏈接:
Code 8 - EventHandler for Click Event of Link Button
雖然我現(xiàn)在可以通過搜索圖書窗口插入圖書的超鏈接,然而在大多數(shù)時候我更愿意遵循以下步驟插入圖書的超鏈接:
在文檔的某個位置輸入要插入超鏈接的圖書的書名;
選中這個書名,使之處于高亮(highlight)狀態(tài);
點(diǎn)擊Ribbon上的Amazon Book按鈕打開搜索圖書的窗口,此時,這個書名顯示在編輯框里,而搜索結(jié)果則顯示在ListView里,并且第一本書處于選中狀態(tài);
如果選定的圖書不是我要找的,則在搜索結(jié)果里重新選擇;
點(diǎn)擊Link按鈕插入選定的圖書的超鏈接。
為此,我需要為搜索窗口添加Load事件委托:
Code 9 - EventHandler for Load Event of BookSearchView
由于搜索窗口的Load事件委托和Go按鈕的Click事件委托都需要執(zhí)行搜索操作和向ListView填充搜索結(jié)果,所以我把這部分代碼提取出來以便重用,這樣Go按鈕的Click事件委托就可以簡化為:
Code 10 - New Version of Click EventHandler for Go Button
此時,當(dāng)我點(diǎn)擊Link按鈕,原先選中的那個書名將被替換成從Amazon.com獲取的完成的書名以及作者的名字,但我希望在原先選中的那個書名的基礎(chǔ)上插入超鏈接并追加作者的名字,于是,我把Link按鈕的Click事件委托里為textToDisplay變量賦值的代碼改成下面這樣:
Code 11 - Assignment to textToDisplay Variable
幸運(yùn)經(jīng)典
還記得在設(shè)計Ribbon的時候把Amazon Book按鈕設(shè)為SplitButton而非普通的Button嗎?之所以這樣做,是因為我希望為這個插件添加一個比較特別的功能,類似于Google的"手氣不錯"(I'm Feeling Lucky)。我為Amazon Book按鈕的下拉菜單添加了兩個(普通)按鈕,一個是Amazon Book按鈕,另一個是Lucky Book按鈕,運(yùn)行起來像這樣:
相關(guān)閱讀