Windows 8 Store Apps学习(38) 契约: Search Contract2013-12-06 cnblogs webabcd介绍重新想象 Windows 8 Store Apps 之 契约Search Contract - 右侧边栏称之为 Charm, 其 中的“搜索”称之为 Search Contract使用 Search Contract 的搜索建议,数据源在本地,以及从输 入法编辑器中获取相关信息使用 Search Contract 的搜索建议,数据源在服务端,以及为搜索建议增 加图标、描述等使用 Search Contract 的基于本地文件的搜索建议,数据来源于文件的 metadata示例1、演示 Search Contract 的基本应用Contracts/SearchContract/Demo.xaml
<Pagex:Class="XamlDemo.Contracts.SearchContract.Demo"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Contracts.SearchContract"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><TextBlock Name="lblMsg" FontSize="14.667" Text="直接通过键盘输入即可激活 SearchPane" /><Button Name="btnShowSearch" Content="打开 SearchPane" Click="btnShowSearch_Click_1" Margin="0 10 0 0" /></StackPanel></Grid></Page>
Contracts/SearchContract/Demo.xaml.cs
/* * 本例演示 Search Contract 的基本应用 ** Search Contract - 右侧边栏称之为 Charm,其中的“搜索”称之为 Search Contract ** 1、在 Package.appxmanifest 中新增一个“搜索”声明 * 2、在 App.xaml.cs 中 override void OnSearchActivated(SearchActivatedEventArgs args),如果 app 是由搜索激活的,则可以在此获取相关的搜索信息 ** SearchActivatedEventArgs - 当 app 由搜索激活时的事件参数 * QueryText - 搜索文本 * PreviousExecutionState - 此 app 被搜索激活前的执行状态(ApplicationExecutionState 枚举:NotRunning, Running, Suspended, Terminated, ClosedByUser) * SplashScreen - 启动画面对象 ** SearchPane - 搜索面板 * GetForCurrentView() - 获取当前的 SearchPane * Show() - 显示搜索面板,需要的话可以指定初始查询字符串 * PlaceholderText - 当搜索框没有输入焦点且用户未输入任何字符时,搜索框中的提示文本 * SearchHistoryEnabled - 是否启用搜索建议的历史记录功能,默认值是 true * SearchHistoryContext - 如果启用了搜索建议的历史记录功能,则此值用于指定历史纪录的上下文,即历史记录会在此上下文中保存和获取,也就是说一个 app 的搜索建议历史记录可以有多套 * ShowOnKeyboardInput - 如果发现键盘输入,是否激活搜索面板,默认值是 false * Visible - 搜索面板是否是打开状态,只读 * QueryChanged - 搜索面板的搜索框中的文本发生变化时所触发的事件 * QuerySubmitted - 提交搜索面板的搜索框中的文本时所触发的事件 * VisibilityChanged - 打开或关闭搜索面板时所触发的事件 */using System;using Windows.ApplicationModel.Activation;using Windows.ApplicationModel.Search;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Navigation;namespace XamlDemo.Contracts.SearchContract{public sealed partial class Demo : Page{private SearchPane _searchPane;public Demo(){this.InitializeComponent();}protected override void OnNavigatedTo(NavigationEventArgs e){// 获取当前的 SearchPane,并注册相关事件_searchPane = SearchPane.GetForCurrentView();_searchPane.QueryChanged += _searchPane_QueryChanged;_searchPane.QuerySubmitted += _searchPane_QuerySubmitted;// 当搜索框没有输入焦点且用户未输入任何字符时,搜索框中的提示文本_searchPane.PlaceholderText = "请输入";// 是否启用搜索建议的历史记录_searchPane.SearchHistoryEnabled = true;// 指定搜索建议的历史记录的上下文_searchPane.SearchHistoryContext = "abc";// 如果有键盘输入,则直接激活 SearchPane_searchPane.ShowOnKeyboardInput = true;// 通过搜索激活应用程序时(参见 App.xaml.cs 中的 OnSearchActivated() 方法)SearchActivatedEventArgs searchActivated = (SearchActivatedEventArgs)e.Parameter;if (searchActivated != null)ShowSearchPane(searchActivated.QueryText);}protected override void OnNavigatedFrom(NavigationEventArgs e){// 取消相关事件的监听_searchPane.QueryChanged -= _searchPane_QueryChanged;_searchPane.QuerySubmitted -= _searchPane_QuerySubmitted;_searchPane.ShowOnKeyboardInput = false;}private void btnShowSearch_Click_1(object sender, RoutedEventArgs e){ShowSearchPane();}// 显示 Search 面板private void ShowSearchPane(string queryText=""){_searchPane.Show(queryText);lblMsg.Text = queryText;}void _searchPane_QueryChanged(SearchPane sender, SearchPaneQueryChangedEventArgs args){lblMsg.Text = args.QueryText;}void _searchPane_QuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args){lblMsg.Text = args.QueryText;}}}
App.xaml.cs
// 通过搜索激活应用程序时所调用的方法protected override void OnSearchActivated(SearchActivatedEventArgs args){if (args.PreviousExecutionState == ApplicationExecutionState.Running)return;var rootFrame = new Frame();rootFrame.Navigate(typeof(MainPage), args);Window.Current.Content = rootFrame;Window.Current.Activate();}
2、本例演示如何使用 Search Contract 的搜索建议,数据源在本地。同时演示如何从输入法编辑 器中获取相关信息Contracts/SearchContract/LocalSuggestion.xaml
<Pagex:Class="XamlDemo.Contracts.SearchContract.LocalSuggestion"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:XamlDemo.Contracts.SearchContract"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Grid Background="Transparent"><StackPanel Margin="120 0 0 0"><TextBlock Name="lblMsg" FontSize="14.667" Text="本例演示如何使用 Search Contract 的搜索建议,数据源在本地。同时演示如何从输入法编辑器中获取相关信息" /></StackPanel></Grid></Page>