Windows Store apps开发[12]Windows 8 中搜索合约的使用
来源:互联网 发布:sql分组查询所有数据 编辑:程序博客网 时间:2024/05/01 17:57
注:本系列学习帖子我在DevDiv.com移动开发社区原创首发
转载请注明出处:BeyondVincent(破船)@DevDiv.com
如果你有什么问题也可以前往交流
下面是首发地址:
[DevDiv原创]Windows 8 Metro App开发Step by Step---(13个学习帖子)
在上一篇文章,我给大家介绍了Windows 8中的合约,如果你还没有看的话,建议你先去阅读一下。在本篇文章中,我将利用搜索合约,来跟大家介绍合约的使用。为了演示的方便,本次示例我使用下面这篇文章中的示例进行改进。
Windows 8 Metro App开发[7]视图模型与数据绑定
本文的内容结构如下:
1、搜索合约的声明
2、搜索的激活
3、提交查询的候选项
4、运行效果和示例代码
更多内容请查看下面的帖子
Windows 8 Metro App开发Step by Step
1、搜索合约的声明
我们打开上面提到的示例程序,并打开Package.appxmanifest文件,选择声明选项卡,如下图,并找到选择搜索声明,然后添加:
2、搜索的激活
打开App.xml.cs文件,在其中添加如下函数
protected override void OnSearchActivated(SearchActivatedEventArgs args){ viewModel.SearchAndSelect(args.QueryText);}
当应用程序以显示搜索结果为目的被激活时,该方法会被调用,也就是说,从搜索面板中输入内容,然后回车可以激活该方法。
在这里,我把viewModel的位置放到App里面了,这样方便调用。在viewModel方法中我添加了一个方法SearchAndSelect,该方法用于搜索内容。代码如下:该代码的左右就是查找出ForumItemList 中name与搜索内容符合的字段,并记录相关的index。
public void SearchAndSelect(string searchTerm){ int selIndex = -1; for (int i = 0; i < ForumItemList.Count; i++) { if (ForumItemList<i>.Name.ToLower().Contains(searchTerm.ToLower())) { selIndex = i; System.Diagnostics.Debug.WriteLine(ForumItemList<i>.Name); break; } } SelectedItemIndex = selIndex;}
为了在界面上让搜索命中相选中,我还对SelectedItemIndex进行了监听,如果发生改变则界面先择也相应的进行改变,如下代码
viewModel.PropertyChanged += (sender, args) =>{ if (args.PropertyName == "SelectedItemIndex") { ForumList.SelectedIndex = viewModel.SelectedItemIndex; }};
这样,当SelectedItemIndex 改变的时候,界面上的选中项也会发生改变。
3、提交查询的候选项
为了加强用户体验,方便用户选择搜索内容,我们可以在搜索面板添加一些搜索的候选项。当用户在输入内容的时候,按照一定的规则,给用户列出适合的内容。
首先需要做的事情就是监听SuggestionRequested事件,当用户开始在搜索框中输入内容时,就会触发该事件。那么我们可以通过下面的代码进行注册:注意在这里需要增加using Windows.ApplicationModel.Search;否则会出现错误。
SearchPane.GetForCurrentView().SuggestionsRequested += searchPane_SuggestionsRequested;
当SuggestionRequested事件来的时候,我们就可以发送候选项建议了。就像查询一样,候选项内容可以来自网络服务,或者自行组合,在这里为了演示目的,我从ForumItemList中获取内容,在SearchPageSuggestionsRequestedEventArgs实例中,我们可以把候选项添加到SearchSuggestionCollection中,SearchSuggestionCollection中的内容会显示在搜索面板中。因为当用户每次输入内容的时候,该方法都会被调用,因此一定要注意该函数的编写。下面是我的代码:
需要注意的是搜索面板只能显示最多5个候选项
void searchPane_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args){ foreach (ForumItem forumItem in viewModel.ForumItemList) { string suggestion = forumItem.Name; if (suggestion.StartsWith(args.QueryText, StringComparison.CurrentCultureIgnoreCase)) { args.Request.SearchSuggestionCollection.AppendQuerySuggestion(suggestion); } if (args.Request.SearchSuggestionCollection.Size >= 5) { break; } }}
这样我们就成功的在程序中实现了搜索合约功能。下面我们看看运行效果
4、运行效果和示例代码
实运行程序,调出搜索面板(Windows键+Q),输入W字母,看到如下效果图,在右边列出了以W开头的两个候选项
选择第二项:Windows 8 开发论坛,此时左边的对应项会被选中,如下图所示:
到此,搜索合约的讲解就结束了,欢迎大家的阅读。
下面附上相关代码工程
DevDiv_DataBinding.rar
- Windows Store apps开发[12]Windows 8 中搜索合约的使用
- Windows Store apps开发[63]Windows 8 开发31日-第06日-搜索合约
- Windows Store apps开发[62]Windows 8 开发31日-第05日-设置合约
- Windows Store apps开发[64]Windows 8 开发31日-第07日-共享合约
- Windows Store apps开发[11]浅谈Windows 8 中的合约(contracts)
- Windows Store apps开发[28]在Windows 8 Apps中通过C#使用Web Service
- Windows Store apps开发[75]Windows 8 开发31日-第18日-文件关联和程序合约
- Windows Store apps开发[3]应用程序栏(AppBar)的使用
- Windows Store apps开发[5]导航栏(AppBar)的使用
- Windows Store apps开发[48]MessageDialog的使用
- Windows Store apps开发[31]Windows Store中企业账号和个人账号的区别
- Windows Store apps开发[57]Windows 8 开发31日
- Windows Store apps开发[35]如何创建自己的Windows Store账号来提交Apps
- Windows Store apps开发[80]Windows 8 开发31日-第22日-使用Play To
- Windows Store apps开发[39]Windows 8中的Semantic Zoom(语义缩放)(2)SemanticZoom控件的使用
- Windows Store apps开发[16]编写和使用自己的Windows Runtime组件
- Windows Store apps开发[29]使用Blend设计ButtonStyle
- Windows Store apps开发[47]使用默认程序打开文件
- DedeCMS本地安装多个同一版本的DedeCMS系统
- 用C#如何创建、读取cookie
- Windows Store apps开发[11]浅谈Windows 8 中的合约(contracts)
- hibernate map映射(value为简单类型)
- 區分CCD與CMOS
- Windows Store apps开发[12]Windows 8 中搜索合约的使用
- 尺规画图——三等分点
- B+树和B-树
- 第03章 面向对象 44 interface2
- boost asio 应用方法学——取消的实现
- OpenGL渲染字体的批处理操作
- Oracle ASM Architecture
- boost asio 应用方法学——转换为同步
- 进制转换与位运算