在AutoCompleteBox组件中集成搜索引擎的功能是十分常见的,这有助于我们更好地与Web进行交互。本文将为大家讲述如何在在AutoCompleteBox组件中集成搜索引擎的搜索建议。

实例:

说明:本实例用的搜索引擎是微软的Bing(必应)

详细的说明在代码中给出。

WebServiceHelper.cs(业务辅助类)文件代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Globalization;

using System.Diagnostics.CodeAnalysis;

using System.Net;

using System.Windows.Browser;

using System.Windows.Controls;

namespace SilverlightClient

{

public static class WebServiceHelper

{

private const string LiveSuggestionsJsonUriFormat = "http://api.search.live.net/qson.aspx?query={0}";

private const string LiveSearchUriFormat = "http://search.live.com/results.aspx?q={0}";

public static bool CanMakeHttpRequests

{

get

{

if (!HtmlPage.IsEnabled)

{

return false;

}

string scheme = HtmlPage.Document.DocumentUri.Scheme ?? string.Empty;

return string.Compare(scheme, "http", StringComparison.OrdinalIgnoreCase) == 0;

}

}

public static Uri CreateWebSearchUri(string searchText)

{

return new Uri(string.Format(CultureInfo.InvariantCulture, LiveSearchUriFormat, HttpUtility.UrlEncode(searchText)));

}

public static Uri CreateWebSearchSuggestionsUri(string searchText)

{

return new Uri(string.Format(CultureInfo.InvariantCulture, LiveSuggestionsJsonUriFormat, HttpUtility.UrlEncode(searchText)));

}

}

}

MainPage.xaml文件代码:

<UserControl

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d" xmlns:input="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input" x:Class="SilverlightClient.MainPage"

d:DesignWidth="320" d:DesignHeight="240">

<Grid x:Name="LayoutRoot" Width="320" Height="240" Background="White">

<TextBlock Height="26" HorizontalAlignment="Left" Margin="8,8,0,0" VerticalAlignment="Top" Width="120" FontSize="16" Text="请输入搜索词:" TextWrapping="Wrap"/>

<input:AutoCompleteBox x:Name="Search" FontSize="14" FilterMode="None" Height="26" Margin="8,55,112,0" VerticalAlignment="Top" Width="200"/>

<Button x:Name="GoSearch" Height="26" HorizontalAlignment="Right" Margin="0,55,34,0" VerticalAlignment="Top" Width="74" Content="Search!" FontSize="13.333"/>

</Grid>

</UserControl>

MainPage.xaml.cs文件代码:

using System;

using System.Collections.Generic;

using System.Diagnostics.CodeAnalysis;

using System.Json;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Browser;

using System.Windows.Controls;

using System.ComponentModel;

namespace SilverlightClient

{

public partial class MainPage : UserControl

{

public MainPage()

{

InitializeComponent();

//注册事件触发处理

this.Loaded += new RoutedEventHandler(MainPage_Loaded);

}

void MainPage_Loaded(object sender, RoutedEventArgs e)

{

if (WebServiceHelper.CanMakeHttpRequests)//如果能做Http请求

{

//注册AutoCompleteBox组件的下拉框内容正在生成事件触发处理

Search.Populating += Search_Populating;

//建立打开结果窗口的事件委托

Action go = () => HtmlPage.Window.Navigate(WebServiceHelper.CreateWebSearchUri(Search.Text), "_blank");

//注册AutoCompleteBox组件的KeyUp事件触发处理。当按下Enter键时,相当于提交

Search.KeyUp += (s, args) =>

{

if (args.Key == System.Windows.Input.Key.Enter)

{

go();

}

};

//搜素按钮的事件触发处理

GoSearch.Click += (s, args) => go();

}

}

private void Search_Populating(object sender, PopulatingEventArgs e)

{

AutoCompleteBox autoComplete = (AutoCompleteBox)sender;

//等待结果

e.Cancel = true;

//创建一个搜索建议请求

WebClient wc = new WebClient();

wc.DownloadStringCompleted += OnDownloadStringCompleted;

wc.DownloadStringAsync(WebServiceHelper.CreateWebSearchSuggestionsUri(autoComplete.SearchText), autoComplete);

}

private void OnDownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)

{

AutoCompleteBox autoComplete = e.UserState as AutoCompleteBox;

if (autoComplete != null && e.Error == null && !e.Cancelled && !string.IsNullOrEmpty(e.Result))//如果没有出现异常情况的话

{

List<string> data = new List<string>();

try

{

JsonObject jso = ((JsonObject)JsonObject.Parse(e.Result))["SearchSuggestion"] as JsonObject;//创建Json对象

string originalSearchString = jso["Query"];//原始查询字符串

if (originalSearchString == autoComplete.SearchText)

{

foreach (JsonObject suggestion in (JsonArray)jso["Section"])

{

data.Add(suggestion.Values.First());

}

autoComplete.ItemsSource = data;//填充AutoCompleteBox组件的数据源

autoComplete.PopulateComplete();//结束AutoCompleteBox组件的下拉框内容生成

}

}

catch

{

}

}

}

}

}

最终效果图:

作者:Kinglee
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。

转载于:https://www.cnblogs.com/Kinglee/archive/2009/09/30/1577106.html

有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion)——Silverlight学习笔记[40]...相关推荐

  1. 强大的DataGrid组件[4]_实现CURD[上]——Silverlight学习笔记[12]

    在本教程中,主要为大家讲述如何使用DataGrid来对后台数据库进行CURD操作.由于CURD操作是与数据库交互中最为常用的,因此掌握其使用方法就显得尤为必要.本教程将使用Linq to SQL Cl ...

  2. oracle 方泽宇_斯坦福大学CS520知识图谱系列课程学习笔记:第二讲如何构建知识图谱...

    上一讲我们学习了知识图谱的一些基本概念:泽宇:斯坦福大学CS520知识图谱系列课程学习笔记:第一讲什么是知识图谱​zhuanlan.zhihu.com 本节课程关于如何构建知识图谱,因为知识图谱的构建 ...

  3. 有关Expander组件的研究——Silverlight学习笔记[33]

    Expander组件常用做边栏目录的分类,比如Windows中"我的文档"的侧边栏.本文将为大家介绍该组件的基本特性以及实际应用. 组件所在命名空间: System.Windows ...

  4. 有关Rating组件的研究——Silverlight学习笔记[41]

    我们经常能在网上发现为新闻.博客文章.图片或是电影视频的评分功能.在Silverlight中,使用Rating组件便能助我们完成以上的功能.本文将为大家介绍该组件的基础知识以及自定义应用方面等方面的内 ...

  5. 有关Accordion组件的研究——Silverlight学习笔记[27]

    Accordion组件在开发中常用于信息的分类显示.本文将为大家介绍该组件的特性以及通过一个实例讲述该组件的基本运用. 组件所在命名控件: System.Windows.Controls 组件常用方法 ...

  6. 有关DataVisualization类组件的研究——Silverlight学习笔记[43]

    Data Visualization类组件以直观的图表方式显示数据的分布,能够让我们更好地分析各数据的内在联系.本文主要向大家介绍该类组件的基本特性以及使用实例. 一.基本特性介绍 1.chart组件 ...

  7. 有关Silverlight TreeView组件的研究[3]——Silverlight学习笔记(8)

    三.数据绑定与模板样式 说明:通过学习本文内容,您将了解到怎样动态地进行关于TreeView组件的数据绑定以及TreeViewItem组件的模板样式更改.本文给出基本的使用方法.   注:在Silve ...

  8. 有关Silverlight TabControl组件的研究——Silverlight学习笔记(5)

    说明:通过对于Silverlight TabControl组件及其子组件TabItem的学习,您将了解到该组件能够有效充分地利用屏幕空间,并且能展示大量的数据内容,使得应用程序的内容布局更趋合理. [ ...

  9. 有关Silverlight浮动窗体组件的研究——Silverlight学习笔记(3)

    说明:Silverlight的ChildWindow组件给我们的开发带来了便利,比如说我们可以用它开发自定义对话框等.然而,这同时也带来了这样一个问题,ChildWindow组件只能以Modal Wi ...

最新文章

  1. 2019年《计算机应用基础》,2019年自考《计算机应用基础》模拟练习及答案一
  2. 二周第三次课(3月28日)
  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白
  4. 【知识星球】几个人像分割数据集简介和下载
  5. Fiori 出试(WEBIDE平台)day1
  6. 突破性能极限——阿里云神龙最新ASPLOS论文解读
  7. 面试题,你觉得什么样的产品适合做成saas?
  8. duilib WindowImplBase BUG修复 --- 按一次ESC键, 关闭多个窗口
  9. 锂电池接线方法图_锂电池制浆工艺(2)——制浆设备种类及特征
  10. Kali [Nmap]端口扫描工具
  11. 在百度地图中获取当前点击 位置的 经纬度 和 地址信息
  12. 为自己的站点实现访客统计
  13. kubeadm创建k8s集群(1.14.2版本)
  14. TP-LINK WR886N路由器登录过程分析
  15. 智能家居改装方案学习笔记【双控灯改智能单控灯】2022.05.08
  16. 用4433法则+python代码筛选债券基金
  17. HBCTF第三场WP
  18. 如果你有一台超级计算机,你会用它来做什么?
  19. 信号波峰波谷二阶差分识别算法
  20. 常见字符对应的ASCII值

热门文章

  1. 计算机主机内部防尘装置,一种计算机主机用防尘装置的制作方法
  2. android新闻管理,Android资讯新闻类App(头条、网易等),频道管理集成之数据库存储...
  3. c语言 游戏程序,C语言做的推箱子游戏源程序
  4. 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比
  5. python找到一行单词中最长的_在Python的给定列表中找到k个最长的单词
  6. 树莓派3 kali linux很卡,树莓派3装kali Linux 成功写入 但是点不亮 为什么?
  7. Linux系统 proc self,Linux内核源代码情形分析-特殊文件系统/proc-对/proc/self/cwd的访问...
  8. html5基础知识点表单
  9. windows下ab的安装和压测
  10. sklearn综合示例5:多分类分类器