概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。
本节将综合前面几篇介绍与浏览器交互部分内容,做一个综合示例——Live Search

准备知识

在本示例中,我们将通过调用Live Search API,在Silverlight中动态创建DOM结构,将搜索的结果展现出来。在使用Live Search API之前,需要先去Live Search Developer Center申请一个应用程序ID。
申请完成后应用程序ID大约在10分钟左右生效。关于Live Search API的有关详细信息,请大家参考这里。

编写ASMX

直接调用API,返回的信息可能有很多,为了简单起见,我们对返回的结果做一些处理,编写一个SearchResultItem类:
public class SearchResultItem
{public string Title { get; set; }public string Url { get; set; }public string Description { get; set; }
}
添加对Live Search API的Service引用,地址为:[url]http://soap.search.live.com/webservices.asmx?wsdl[/url]。
在ASMX中对返回的结果进行一些处理,Silverlight程序最后将直接调用ASMX。在调用Live Search时需要指定应用程序ID以及本地化的信息等,查询的参数将在Silverlight程序中调用时传入。
[WebMethod]
public SearchResultItem[] DoSearch(string query)
{MSNSearchPortTypeClient s = new MSNSearchPortTypeClient();SearchRequest searchRequest = new SearchRequest();int arraySize = 1;SourceRequest[] sr = new SourceRequest[arraySize];sr[0] = new SourceRequest();sr[0].Source = SourceType.Web;searchRequest.Query = query;searchRequest.Requests = sr;searchRequest.AppID = "C0680205851CCC0E38946DB8FF74156C1C826A86";searchRequest.CultureInfo = "zh-CN";SearchResponse searchResponse;searchResponse = s.Search(searchRequest);List<SearchResultItem> lists = new List<SearchResultItem>();foreach (SourceResponse sourceResponse in searchResponse.Responses){Result[] sourceResults = sourceResponse.Results;foreach (Result sourceResult in sourceResults){SearchResultItem item = new SearchResultItem();if ((sourceResult.Title != null) && (sourceResult.Title != String.Empty))item.Title = sourceResult.Title;if ((sourceResult.Description != null) && (sourceResult.Description != String.Empty))item.Description = sourceResult.Description;if ((sourceResult.Url != null) && (sourceResult.Url != String.Empty))item.Url = sourceResult.Url;lists.Add(item);}}return lists.ToArray();
}
测试一下我们的服务是否正常:
 

修改测试页

在测试ASPX中,修改Silverlight插件的样式控制,并添加一个div用来显示搜索的结果:
<div  style="height:100%;"><asp:Silverlight ID="Xaml1" runat="server" Source="~/ClientBin/TerryLee.SilverlightGoogleSearch.xap"Version="2.0" Width="857" Height="140" /><div id="result"></div>
</div>
定义几个简单的样式:
<style type="text/css">#result{margin-left:20px;}.urlstyle{color:#59990E;}.itemstyle{border-bottom:dotted 1px #59990E;margin-bottom:20px;}
</style>

实现Silverlight程序

编写一个简单的Silverlight界面,使其看起来如图所示:
XAML声明如下:
<Grid x:Name="LayoutRoot" Background="White"><Grid.RowDefinitions><RowDefinition Height="55"></RowDefinition><RowDefinition Height="50"></RowDefinition><RowDefinition Height="35"></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="*"></ColumnDefinition></Grid.ColumnDefinitions><Image Source="LiveSearch.png" Grid.Column="0"></Image><StackPanel Grid.Row="1" Orientation="Horizontal"><TextBox x:Name="txtQuery" Width="400" Height="35"Margin="50 0 0 0" BorderBrush="#3F7801"></TextBox><Button x:Name="btnSearch" Width="120" Height="35"Background="#62A21D" Margin="20 0 0 0"Content="Search" FontSize="16" Click="btnSearch_Click"></Button></StackPanel><TextBlock Grid.Row="2" Text="网页搜索结果" Foreground="#59990E"FontSize="16" Margin="20 0 0 0"></TextBlock>
</Grid>
在Silverlight项目中添加对于ASMX的引用,并编写“Search”按钮的实现,对于如何调用ASMX,可以参考一步一步学Silverlight 2系列(15):数据与通信之ASMX。动态创建DOM结构,并将结果显示出来:
private void btnSearch_Click(object sender, RoutedEventArgs e)
{LiveSearchWebServiceSoapClient client = new LiveSearchWebServiceSoapClient();client.DoSearchCompleted += new EventHandler<DoSearchCompletedEventArgs>(client_DoSearchCompleted);client.DoSearchAsync(this.txtQuery.Text);
}
void client_DoSearchCompleted(object sender, DoSearchCompletedEventArgs e)
{if (e.Error == null){SearchResultItem[] results = e.Result as SearchResultItem[];HtmlElement result = HtmlPage.Document.GetElementById("result");foreach (SearchResultItem item in results){HtmlElement itemElement = HtmlPage.Document.CreateElement("div");itemElement.CssClass = "itemstyle";HtmlElement titleElement = HtmlPage.Document.CreateElement("a");titleElement.SetAttribute("href",item.Url);titleElement.SetAttribute("innerText",item.Title);HtmlElement descriptElement = HtmlPage.Document.CreateElement("div");descriptElement.SetAttribute("innerText",item.Description);HtmlElement urlElement = HtmlPage.Document.CreateElement("span");urlElement.SetAttribute("innerText",item.Url);urlElement.CssClass = "urlstyle";itemElement.AppendChild(titleElement);itemElement.AppendChild(descriptElement);itemElement.AppendChild(urlElement);result.AppendChild(itemElement);}}
}
运行看一下效果,查询博客园:

结束语

本文综合了前面关于浏览器集成以及数据与通信部分的内容,开发了一个综合的示例——Live Search。你可以从这里下载本文示例代码。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/67273

本文出自 51CTO.COM技术博客

转载于:https://www.cnblogs.com/GT_Andy/archive/2009/07/28/1922010.html

(25):Silverlight 2 综合实例之Live Search相关推荐

  1. 一步一步学Silverlight 2系列(25):综合实例之Live Search

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  2. (18):Silverlight 2 综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. 一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. C++ 个人银行账户管理 综合实例62.10_date

    在网上找了很多例子,代码都不是循序渐进的,自己一点一点按章节把代码按照老师的要求都码好了,一点一点进步吧,因为一开始就去看别人整篇的代码实在很难,带给需要帮助的人,这是第六章第二个综合实例,加入Dat ...

  5. c# Windows窗体应用程序设计综合实例-------小游戏设计

    c# Windows窗体应用程序设计综合实例(一)匹配游戏设计 上次的计时器运行效果图如下: = --------------------------------------------------- ...

  6. Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...

  7. Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三) 本节连着Silverlight+WC ...

  8. Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)

    在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区- ...

  9. Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)

    2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...

最新文章

  1. 从空间数据库中删除所有拓扑对象
  2. Log4j显示异常的奇怪问题
  3. Linux 用户和用户操作
  4. oracle_plseq客户端中文乱码
  5. 外媒解读乌克兰电网遭遇黑客事故
  6. Android opencv cvCvtColor()的转换
  7. [译] 这可能是 2018 年最好的一篇 PHP 性能测评(包含 5.6 到 7.2,以及 HHVM)
  8. python 小波去噪,用Pywavelet去噪信号?
  9. 3.2 python实战_线性回归的梯度下降法
  10. HTML手机上图片显示被压扁,在重新调整Web浏览器HTML |时,文本会被压扁CSS
  11. python lxml用法详解_Python-- lxml用法
  12. nested set model应用系列文章-基于后根跳跃遍历的规则匹配算法
  13. Python+OpenCV:二维直方图(2D Histograms)
  14. TextBar for Mac(菜单栏增强工具)支持m1
  15. mac电脑上的效率工具:alfred 4
  16. 华为ensp常用操作命令 网络人凭经验含泪总结
  17. 网络流专题(最大流与费用流)例题总结
  18. MSNMessenger忌讳用法大全(转)
  19. SEGGER RTT使用总结
  20. wps的ppt如何去掉插入表格的表头与表体之间的空白间隔

热门文章

  1. Webpack4.0 升级配置
  2. Python基础import导包问题
  3. ES6 学习笔记 (1)
  4. 最常用的数据库脚本前十名
  5. http常见的get请求方式和set请求方式。
  6. kali Linux下wifi密码安全测试(1)虚拟机下usb无线网卡的挂载 【转】
  7. SEO基础问题:14.给图片添加alt标签的知识点
  8. PAT1018. 锤子剪刀布
  9. python中按照文件夹中文件的排列顺序读取文件内容
  10. php怎么配置登录密码,如何给phpmyadmin设置登录密码