首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 8 應用開發實戰:搜尋與共用合約完整指南

     編輯:關於.NET

前言

Windows 8 的「魅力列」提供統一的搜尋、共用、裝置、設定四大合約,讓應用與系統、其他應用無縫整合。本文詳細說明如何在 Contoso Cookbook 中實作搜尋合約(含搜尋建議)與共用合約(文字、圖片、多重資料格式)。

共用合約實作

註冊 DataRequested 事件

// LoadState 中註冊
DataTransferManager.GetForCurrentView().DataRequested += OnDataRequested;

// SaveState 中取消註冊
DataTransferManager.GetForCurrentView().DataRequested -= OnDataRequested;

提供文字與圖片資料

void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    var request = args.Request;
    var item = (RecipeDataItem)this.flipView.SelectedItem;
    request.Data.Properties.Title = item.Title;
    request.Data.Properties.Description = "Recipe ingredients and directions";

    // 共用食譜文字
    var recipe = "\r\nINGREDIENTS\r\n";
    recipe += String.Join("\r\n", item.Ingredients);
    recipe += ("\r\n\r\nDIRECTIONS\r\n" + item.Directions);
    request.Data.SetText(recipe);

    // 共用食譜圖片
    var reference = RandomAccessStreamReference.CreateFromUri(new Uri(item.ImagePath.AbsoluteUri));
    request.Data.Properties.Thumbnail = reference;
    request.Data.SetBitmap(reference);
}

共用來源支援多種資料格式(文字、位圖、檔案等),共用目標會根據自身支援能力篩選顯示。

搜尋合約實作

新增搜尋結果頁面

在方案總管右鍵 → 新增項目 → 搜尋合約,Visual Studio 會產生 SearchResultsPage.xaml 並自動修改 App.xaml.cs 加入 OnSearchActivated 處理外部啟動搜尋。

自訂搜尋邏輯

// SearchResultsPage.xaml.cs LoadState 方法中
var groups = RecipeDataSource.GetGroups("AllGroups");
string query = queryText.ToLower();
var all = new List<RecipeDataItem>();
_results.Add("All", all);

foreach (var group in groups)
{
    var items = new List<RecipeDataItem>();
    _results.Add(group.Title, items);
    foreach (var item in group.Items)
    {
        if (item.Title.ToLower().Contains(query) || item.Directions.ToLower().Contains(query))
        {
            all.Add(item);
            items.Add(item);
        }
    }
    filterList.Add(new Filter(group.Title, items.Count, false));
}
filterList[0].Count = all.Count;

搜尋範圍涵蓋標題與作法說明,結果依群組分類並提供篩選器。

篩選器切換處理

// Filter_SelectionChanged 中
this.DefaultViewModel["Results"] = _results[selectedFilter.Name];

調整搜尋結果項目樣板

修改 StandardStyles.xaml 中的 StandardSmallIcon300x70ItemTemplate,移除 Subtitle 繫結,調整尺寸並繫結 ShortTitle。

搜尋建議功能

註冊 SuggestionsRequested 事件

// App.xaml.cs OnLaunched 中
SearchPane.GetForCurrentView().SuggestionsRequested += OnSuggestionsRequested;

提供建議關鍵字

void OnSuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)
{
    string query = args.QueryText.ToLower();
    string[] terms = { "salt", "pepper", "water", "egg", "vinegar", "flour", "rice", "sugar", "oil" };
    foreach(var term in terms)
    {
        if (term.StartsWith(query))
            args.Request.SearchSuggestionCollection.AppendQuerySuggestion(term);
    }
}

使用者輸入 "su" 時自動提示 "sugar",大幅提升搜尋效率。

支援外部啟動搜尋

當應用未執行時從魅力列搜尋啟動,會呼叫 OnSearchActivated 而非 OnLaunched,需手動重新初始化資料與事件註冊:

if (args.PreviousExecutionState == ApplicationExecutionState.NotRunning || 
    args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser || 
    args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    await RecipeDataSource.LoadLocalDataAsync();
    SearchPane.GetForCurrentView().SuggestionsRequested += OnSuggestionsRequested;
}

總結

搜尋與共用合約是 Windows 8 應用生態系統的核心整合機制。透過標準化合約,應用能以一致體驗跨應用交換資料、整合系統級搜尋。下一階段將探討媒體捕獲與應用列進階應用。

共用目標接收食譜文字示意圖 共用目標接收食譜圖片示意圖 新增搜尋合約對話方塊 搜尋 sugar 結果示意圖 搜尋建議運作示意圖
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved