注:本系列学习帖子我在DevDiv.com移动开发社区原创首发
转载请注明出处:BeyondVincent(破船)@DevDiv.com
如果你有什么问题也可以前往交流
下面是首发地址:
在上一篇文章,我给大家介绍了Windows
8中的合约,如果你还没有看的话,建议你先去阅读一下。在本篇文章中,我将利用搜索合约,来跟大家介绍合约的使用。为了演示的方便,本次示例我使用下面这篇文章中的示例进行改进。
Windows 8 Metro App开发[7]视图模型与数据绑定
本文的内容结构如下:
1、搜索合约的声明
2、搜索的激活
3、提交查询的候选项
4、运行效果和示例代码
1、搜索合约的声明
我们打开上面提到的示例程序,并打开Package.appxmanifest文件,选择声明选项卡,如下图,并找到选择搜索声明,然后添加:
然后我们部署应用程序到计算机上。部署完毕之后,按Windows+Q组合键,可以看到,我们的示例程序:搜索合约测试已经在搜索面板中了。如果这里不添加搜索声明的话,在搜索面板中是看不到的。如下两图所示(左图是已经添加搜索声明的,右图则是没有添加) 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 8 Metro App开发》是Windows 8 Metro App开发的帮助文档
Windows 8 Metro App设计指导
Windows8 Metro实例
Windows8 Modern(Metro)界面程序管理工具。集离线部署、卸载、清理和破解于一身,并可对metro界面程序设置代理访问Internet,功能超强!
Windows 8 Developer Preview Metro style app samples.zip
Windows8 Metro HubTile 控件 详细sample
windows8 metro style
使用C# & WPF呼叫Win8 Metro APP,sample code
用来修改Windows 8 Metro背景的软件.
Windows8 Metro
js代码 [removed][removed] [removed] $(document).ready(function () { ...这是一款基于jQuery CSS3实现的仿windows8 Metro风格界面布局效果,Win8 Metro系统风格面板点击全屏打开展示内容。
IE仿windows8的metro界面功能,可以对色块磁贴进行添加,拖拉互换位置,拖拉到垃圾箱进行删除,色块磁贴中可以切换图片,切换内容等等功能,兼容IE,Firefox等主流浏览器。
windows8应用开发 c# 超详细,超经典
黑色个性仿Windows 8 Metro界面网站模板_黑色 个性 窄 相册 摄影 简历 案例 metro界面 windows8 黑色个性仿Windows 8 Metro界面网站模板_黑色 个性 窄 相册 摄影 简历 案例 metro界面 windows8
大量windows8 metro风格图标,可以用在你的应用中,也可以用于效果图渲染。
全局鼠标钩子 可以在win8 Metro app 以上显示,如何能够显示在Metro App以上,请参照tools中的Windows 8 TopMost window.docx,均在x86模式下验证过. vs2015/vs2013打开
VB.NET制作Windows8 MetroUI Form 风格界面!供大家参考!
windows8 Metro-UI-CSS-master 完整的WINDWOS8风格界面样式
130 Free Windows Metro Icons
Metro apps are an important addition to Microsoft Windows 8, providing the cornerstone for a single, consistent programming and interaction model across desktops, tablets, and smartphones. The Metro ...