然后实现SplitButton的Click事件委托:
Code 6 - EventHandler for Click Event of Amazon Book SplitButton
好了,运行插件看看效果:
图 3 - Oops! The Value of ImageUrl is null
噢,抛了一个ArgumentNullException异常!还记得我是怎么处理ImageUrl吗?在Code 5里,当Amazon Web Service返回的搜索结果里面某本图书没有图片时,BookSearch.GetImageUrl方法返回null,类似地,ImageManager.GetImage方法也应该在遇到这种情况时返回一个"占位图片":
Code 7 - New Version of GetImage Method
再次运行插件,可以看到预期的效果了:
图 4 - Search Results
连接经典
终于轮到本回的主角出场了,当用户点击搜索图书窗口的Link按钮时将在当前文档的光标处插入选定图书的超链接:
Code 8 - EventHandler for Click Event of Link Button
虽然我现在可以通过搜索图书窗口插入图书的超链接,然而在大多数时候我更愿意遵循以下步骤插入图书的超链接:
在文档的某个位置输入要插入超链接的图书的书名;
选中这个书名,使之处于高亮(highlight)状态;
点击Ribbon上的Amazon Book按钮打开搜索图书的窗口,此时,这个书名显示在编辑框里,而搜索结果则显示在ListView里,并且第一本书处于选中状态;
如果选定的图书不是我要找的,则在搜索结果里重新选择;
点击Link按钮插入选定的图书的超链接。
为此,我需要为搜索窗口添加Load事件委托:
Code 9 - EventHandler for Load Event of BookSearchView
由于搜索窗口的Load事件委托和Go按钮的Click事件委托都需要执行搜索操作和向ListView填充搜索结果,所以我把这部分代码提取出来以便重用,这样Go按钮的Click事件委托就可以简化为:
Code 10 - New Version of Click EventHandler for Go Button
此时,当我点击Link按钮,原先选中的那个书名将被替换成从Amazon.com获取的完成的书名以及作者的名字,但我希望在原先选中的那个书名的基础上插入超链接并追加作者的名字,于是,我把Link按钮的Click事件委托里为textToDisplay变量赋值的代码改成下面这样:
Code 11 - Assignment to textToDisplay Variable
幸运经典
还记得在设计Ribbon的时候把Amazon Book按钮设为SplitButton而非普通的Button吗?之所以这样做,是因为我希望为这个插件添加一个比较特别的功能,类似于Google的"手气不错"(I'm Feeling Lucky)。我为Amazon Book按钮的下拉菜单添加了两个(普通)按钮,一个是Amazon Book按钮,另一个是Lucky Book按钮,运行起来像这样:
相关阅读