Windows8 Metro 設計與開發-搜尋與共用 (1)

來源:互聯網
上載者:User
在這個實驗中,我們將給Contoso Cookbook增加搜尋與共用支援。您將瞭解實現搜尋和共用Contracts的第一手經驗,而且您將理解這些Contracts是如何在Metro風格應用與Metro本身之間實現進階整合的。

 

增加菜譜共用

                                       

在練習1中,我們將為ContosoCookbook增加共用支援,將菜譜共用給其他應用。第一個菜譜必須共用兩種資料:包括菜譜名、配料和做法等的文本資料,以及包括菜譜圖片展示的映像資料。

任務1 –調用Share常用鍵

首先,讓我們看看在增加共用之前,在Contoso Cookbook中調用Share常用鍵的效果。

1.      在Visual Studio 中開啟實驗 2 中完成的項目。如果您沒有完成實驗 2 或者希望從參考副本開始操作,可以在原始材料中找到該實驗的完整版本。

2.      按 F5 啟動ContosoCookbook。

3.      點擊其中一個菜譜,顯示“item-detail”頁面。

4.      如果使用的是觸控螢幕裝置,從右至左輕掃螢幕右邊緣;否則按Win-C鍵,顯示常用鍵工具列。

5.      點擊“Share”常用鍵,顯示Metro共用窗格。

6.      由於Contoso Cookbook目前未實現共用Contracts,所以共用窗格顯示“Contoso Cookbook can’t share(Contoso Cookbook不支援共用)”。

7.      返回Visual Studio並停止調試。

 

 

任務 2 – 實現菜譜共用

現在,我們已經看到應用未支援共用時報共用窗格。接下來,我們要給 Contoso Cookbook 增加共用Contracts,使之能夠共用菜譜資料。

1.      開啟itemDetailPage.js,將以下語句添加到對 ui.Pages.define 的調用之前(位置在檔案頂部附近):

JavaScript

var _currentItem = null;

2.   將以下高亮顯示的語句插入到隔幾行後面的 ready 函數中:

JavaScript

varitem = options &&options.item ? options.item : data.items.getAt(0);

_currentItem = item;

element.querySelector(".titlearea.pagetitle").textContent = item.group.title;

element.querySelector("article.item-title").textContent = item.title;

element.querySelector("article.item-subtitle").textContent = item.preptime;

element.querySelector("article.item-image").src = item.backgroundImage;

element.querySelector("article.item-image").alt = item.shortTitle;

3.   現在將以下代碼插入到 ready 函數的結尾處:

JavaScript

vardtm=Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

 

dtm.addEventListener("datarequested",function (e) {

varitem = _currentItem;

varrequest = e.request;

request.data.properties.title= item.title;

request.data.properties.description= "Recipe ingredients and directions";

 

    // Share recipe text

varrecipe = "INGREDIENTS\r\n";

 

item.ingredients.forEach(function(ingredient) {

        recipe += ingredient +"\r\n";

    });

 

recipe+= ("\r\nDIRECTIONS\r\n" + item.directions);

request.data.setText(recipe);

});

注意:共用是通過註冊DataTransferManager的DataRequested事件處理器實現的,當使用者啟用Share常用鍵時,就會觸發該事件。在這個例子中,當事件發生時,會調用DataPackage對象中e.request.data的setText方法,填寫內容表單的內容。當共用窗格顯示一個共用目標列表時,這個列表只包含接收內容輸入的共用目標。

 

4.      按F5啟動應用程式。

5.      點擊其中一個菜譜,顯示“recipe-detail”頁面。

6.      顯示常用鍵工具列,選擇Share常用鍵,顯示Metro的共用窗格。現在,共用窗格會顯示裝置安裝的共用目標列表——即接受共用源所提供資料的應用。

注意:如果還未安裝Windows8 SDK提供的共用目標樣本,現在可以安裝。應用的名稱是共用目標樣本應用,它可以示範共用目標應用的開發方法。更重要的是,它提供了一些測試共用目標,可以作為應用開發時的共用源,而且它接受映像、文字及其他資料類型。要安裝共用目標樣本,可以在Visual Studio中開啟並運行該應用。然後,當您選擇 Metro應用的Share常用鍵時,它就會顯示在共用目標列表中。

7.      在共用窗格中選擇一個共用目標,確認它能夠接收菜譜資料。 1 所顯示,Windows8 SDK的共用目標樣本應用接收了ContosoCookbook共用的菜譜內容。


1

共用目標樣本應用顯示共用的菜譜

8.      返回Visual Studio並停止調試。

 

任務 3  – 實現菜譜映像共用

 

Contoso Cookbook現在可以共用文字菜譜資料,但是由於每一個菜譜都附帶有映像,所以它應該要能夠接收映像。因此,接收映像的共用目標才能夠同時顯示菜譜內容及照片(假定共用目標帶有文字及映像)。我們修改一下共用代碼,使之支援位元影像和文字。

1.      在itemDetailPage.js中,轉到任務 2 所添加的DataRequested事件處理器。

2.      將以下代碼添加到處理器之後:

JavaScript

// Share recipe image

var image =document.querySelector(".item-image");

var uri = image.getAttribute("src");

 

if (uri.indexOf("http://") == 0)

uri = newWindows.Foundation.Uri(image.src); // Remote image

else

uri = newWindows.Foundation.Uri("ms-appx:///" +image.getAttribute("src")); // Local images

 

var reference = Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(uri);

request.data.properties.thumbnail =reference;

var deferral = request.getDeferral();

request.data.setBitmap(reference);

deferral.complete();

說明:要在 HTML 頁面上共用映像,需要將映像 URL 傳遞給RandomAccessStreamReference.createFromUri,然後再將返回的RandomAccessStreamReference傳遞給DataPackage.setBitmap。createFromUri本來是同時支援本地及遠程映像,但是在Windows8消費者預覽版中,它還不支援。代碼中的 if-else 子句只是解決這個版本的問題,Windows 8最終版不存在這個問題。

3.      按 F5 啟動應用程式。

4.      點擊其中一個菜譜,顯示“recipe-detail”頁面。

5.      顯示常用鍵工具列,選擇Share常用鍵,顯示 Metro 的共用窗格。

6.      選擇共用窗格所列的一個共用目標,確認它接收了菜譜映像。 2 所示,共用目標樣本應用接收了ContosoCookbook的菜譜映像。


共用目標樣本應用顯示共用菜譜映像 

7.      返回Visual Studio並停止調試。

注意:本文章為msdn上windows8線上實驗的指令碼,僅供學習參考。如果想體驗完整實驗可以點擊以下msdn的線上實驗室

http://msdn.microsoft.com/zh-cn/hh968278  

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.