如何知道 App 在各個國家的銷售價格?

Windows 市集讓您可以在 230 個以上的國家中,挑選要在哪些市場中陳列您的 App,但收費的 App 要如何知道在不同的國家是賣多少錢呢?

 

其實只要在Windows Store 的儀表版中的「銷售詳細資料」中,就能一目瞭然看到各種定價在不同國家/幣別下的售價了。

 

1. 上架過程中的「銷售詳細資料」:

image

 

2. 選擇價格後,就能看到在各個國家的不同售價了:

image

 

果是IAP (In-App Purchase),其定價也是使用相同的價格對照

 

如果您要知道這個售價是如何被計算出來的,可以參考: 選擇您的業務模式

Windows 8 App 的創意專案 template 下載

以下這些可直接下載的60個 Visual Studio 2012 專案 (Project template),可以讓您開始開發 Windows Store App 時,除了內建的模版外多了一些選擇。
您可以自由更動或修改其外觀,以確實符合您 App 的風格及需求;您也不應被這些模版的設計而限制了 App 的延伸設計及功能。說明及文件: http://www.codeproject.com/Articles/616073/60-Design-Templates-for-Windows-Store-Apps 
Template Name: Blocks Styled Colored

clip_image001

Blocks Styled Colored template will help if you want to build an app for the Image gallery or a Tourism Template

Template Name: Drawing Template

clip_image002

The Drawing template is an emulation of a Painting app with placeholders for Drawing area, Color selection and Tool Box.

Template Name: Blocks Template

clip_image003

Blocks template will help you in building an App which has the ingredients line Game, Content and Details Block

Template Name: Health Management Template

clip_image004

The Health Management template is an emulation of a Clinic app with placeholders for Profile, Reports and Patient details.

Template Name: Bricks Style

clip_image005

Brick Style template will help if you want to adopt a brick style variable size display in your app’s hub page.

Template Name: Translator Template

clip_image006

The translator template is an emulation of a translating app with placeholders for translating one language to other. Select language features are left out of the template intentionally as they are better dealt during actual implementation.

Template Name: Discussion Forum Template

clip_image007

The Discussion Forum template is an emulation of a Discussion Forum app with placeholders for Login, Discussion Forum and Detail Page.

Template Name: Tutor Template

clip_image008

The tutor template is an emulation of a tutor app with placeholders for category, catalogue and details data.

Template Name: Invitation Template

clip_image009

The Invitation template is an emulation of an invitation app with placeholders for event category, catalogue, details and review share data. We can also share the created invitation through share source.

Template Name: Planning Diary Template

clip_image010

The Planning Dairy template is an emulation of a Planning Diary app with placeholders for planning the Schedule tracking.

Template Name: Language Convertor Template

clip_image011

The Language Converter template is an emulation of a Language Translator app with placeholders for Category Selection, Choose Scenario and Translate

Template Name: Shopping Template

clip_image012

The shopping template is an emulation of a shopping app with placeholders for product category, catalogue and details data

Template Name: Matching Template

clip_image013

The Matching template is an emulation of a Choose the Best type app with placeholders for Question and Answers.

Template Name: Solution Template

clip_image014

The Solution template is an emulation of a Solution giving app with placeholders for Topic, Query solution and query writing. Add and Save are left out of the template intentionally as they are better dealt during actual implementation.

Template Name: News Template

clip_image015

The News template is an emulation of a News app with placeholders for News category, article and video data.

Template Name: Standard Square Template

clip_image016

The Standard Square template is an emulation of a Square tile app with placeholders for product category and details data.

Template Name: Text keyboard Template

clip_image017

The Text Keyboard template is an emulation of a Keyboard with placeholders for the text keys.

Template Name: Pillar Block Template

clip_image018

The Pillar Block template is an emulation of a Pillar Block app with placeholders for category Display (Local News, Local Events etc.), and details.

Template Name: Tracking Template

clip_image019

The tracking template is an emulation of tracking apps with placeholders for category and details data. Add, Delete and Refresh are left out of the template intentionally as they are better dealt during actual implementation.

Template Name: Recipe Template

clip_image020

The Recipe template provides placeholders for Recipe List, Recipe details data.

Template Name: News Grey Template

clip_image021

The News Grey template is an emulation of a News app with placeholders for News category and News details.

Template Name: Restaurant Template

clip_image022

The Restaurant template is an emulation of a Restaurant app with placeholders for Restaurant category, Restaurant Details. Booking Table and eventual payment features are left out of the template intentionally as they are better dealt during actual implementation.

Template Name: Basic Game Template

clip_image023

The Basic Game template is an emulation of a Basic Game app with placeholders for Game category, catalogue and details data. Shopping cart and eventual payment features are left out of the template intentionally as they are better dealt during actual implementation.

Template Name: News Dark Template

clip_image024

The News Dark template is an emulation of a News app with placeholders for News category and News details.

Template Name: Baby Journal Template

clip_image025

The Baby Journal Template is an emulation of a Baby Journal app with placeholders for Category, Gallery, and Detail data.

Template Name: Ecommerce Fashion Template

clip_image026

The Ecomm Fashion is an emulation of a Shopping app with placeholders for Category, Group Category, and Detail Data. Making use of this template you can create an Ecommerce app in the area of fashion/apparel

Template Name: Cook Book Template

clip_image027

The Cookbook template is an emulation of a Cookery app with placeholders for Group, Category, and Detail data.

Template Name: Ecommerce Jewellery Template

clip_image028

The Ecomm Jewellery is an emulation of a Shopping app. Shopping Cart functionality is left out intentionally as they are better dealt during actual implementation.

Template Name: Health and Fitness Template

clip_image029

The Health & Fitness is an emulation of a fitness app with placeholders for Category, Group Category, and Detail data. Making use of this template you can create any fitness app.

Template Name: Finance Template

clip_image030

The finance template is an emulation of a Finance app with placeholders for Chart and Market Indies data. Making use of this template you can create a Market Watch app.

Template Name: Ecommerce Electronics Template

clip_image031

The Ecomm Electronic is an emulation of an E-commerce app with placeholders for Category, Group Category, and Detail Data. Making use of this template you can create an Ecommerce app, with products catalogue to include electronics/gadget

Template Name: Fitness Freaks

clip_image032

The Fitness Freaks is an emulation of a health and fitness app with placeholders for Category, Group Category, and Detail data. Making use of this template you can create a fitness app to include work routine and statistics

Template Name: Food Light Template

clip_image033

The Food Light template is an emulation of a Recipe app with placeholders for various category of recipe, Ingredients and Instruction.

Template Name: Music Template

clip_image034

The Music Template provides placeholders for Category, Playlist, and Player data. Player control and Add to playlist have been left out intentionally as they are better dealt during actual implementation.

Template Name: Food Variable Tile Template

clip_image035

The Food Variable Tile template is an emulation of a Recipe app with placeholders for Menu and Detail data.

Template Name: News & Weather Template

clip_image036

The News and Weather is an emulation of a News app with placeholders for Grouped Items, Weather, and Detail data.

Template Name: Food and Dining Template

clip_image037

The Food and dining template is an emulation of a Recipe app with placeholders for various category of recipe, Ingredients and Instruction.

Template Name: News Variable Tile Template

clip_image038

The News Variable Tile template is an emulation of a News app with placeholders for News category, Group Category and Detail data.

Template Name: Tutor Advanced

clip_image039

The Tutor Advanced Template is an emulation of a tutor app with placeholders for Category, Gallery, and Detail data.

Template Name: News Big Image Template

clip_image040

The News Big Image template is an emulation of a News app with placeholders for News category, Group Category and Detail data.

Template Name: Notes Template

clip_image041

The Notes Template is an emulation of a Daily Notes app with placeholders for Calendar, Overdue and Task.

Template Name: Travel Dark Theme

clip_image042

The Travel Dark Background is an emulation of a travel app with placeholders for Vacation, group destination and detail data. ‘Add to favourite’ functionality is left out intentionally as they are better dealt during actual implementation.

Template Name: Photo Browser Template

clip_image043

The Photo Browser is an emulation of a Picture browser app with placeholders for Category, Group Category, and Detail Data.

Template Name: Travel Big Picture Template

clip_image044

The Travel picture template is an emulation of a travel app with placeholders for Vacation, group and tour detail data. Enquiry and Bookmark are left out intentionally as they are better dealt during actual implementation.

Template Name: Shoes Store Template

clip_image045

The shoe store is an emulation of a Shopping app with placeholders for Category, Group Category, and Detail data. Making use of this template you can create any Shopping app that involves product catalogue and details

Template Name: Travel Light Theme

clip_image046

The Travel light theme is an emulation of a travel app with placeholders for Summary, Group summary, and Detail data.

Template Name: Travel and Tourism Template

clip_image047

The Travel & Tourism is an emulation of a travel app with placeholders for Summary, Category, and Detail data.

Template Name: Product Template

clip_image048

The Product Template is an emulation of a shopping app with placeholders for Category, Group Category, and Detail data. Making use of this template you can create an shopping app that involves product catalogue and details

Template Name: Block Style Pic Template

clip_image049

The Block Style Pic template is an emulation of a default app with placeholders for Category, Detail data. Making use of this template you can create an app which needs basic image placeholders for data display.

Template Name: LifestyleTemplate

clip_image050

The Lifestyle template is an emulation of a information Search app with placeholders for different Category, Sub Category Detail and Item Detail Page.

FAQ – Windows Store 市集相關問答集

1.        Windows 市集開發人員帳戶如何註冊?

a.     官方網站: https://appdev.microsoft.com/StorePortals/zh-tw/Account/Signup/Start

b.     說明文件: http://msdn.microsoft.com/zh-tw/library/windows/apps/hh868184.aspx 

 

2.        為何我註冊Windows 市集開發人員,帳戶被刷了多筆資訊?

a.    Windows 市集開發人員帳戶費用外,我們會向您的付款方式收取一筆小額費用 (介於 $0.01 $5 美元之間或等值金額)。這筆金額會在幾天內退還給您。這筆金額為驗證識別身分用。

b.    台灣信用卡的驗證步驟: http://blogs.msdn.com/b/mengtsai/archive/2012/12/28/10381067.aspx    

 

3.        如何打包app?

請參考建立應用程式套件

 

4.        Windows 市集上架相關問題:

a.   Windows 市集認證檢驗項目為何?

                          請參考認證需求列表http://msdn.microsoft.com/library/windows/apps/hh694083

 

b.   Windows 市集認證測試工具 – Windows 應用程式認證套件測試應用程式 (WACK) 為何?

    為了讓您的應用程式能順利通過認證,請在送審前,先在您的電腦上進行自我驗證和測試。WACK即為微軟提供的自我檢測工具,已內建在 Visual Studio 2012 開發工具之中。或可自行下載WACK,測試步驟請參考網站

 

WACK檢測項目包含:               

測試名稱

可能的測試結果

測試的認證需求

應用程式資訊清單原則測試

通過

失敗

套件驗證

套件詳細資料

應用程式資訊清單資源測試

通過

失敗

語言驗證

當機和停滯情形測試

通過

失敗

應用程式可靠性

偵錯設定測試

通過

失敗

應用程式成品

檔案編碼測試

通過

失敗

套件驗證

效能測試

通過

失敗

警告

應用程式效能

支援的 Windows 市集 API 測試

通過

失敗

應用程式程式碼驗證

應用程式終止

Windows 安全性功能測試

通過

失敗

應用程式安全性

Direct3D 功能層級測試

通過

失敗

Direct3D 認證需求

 

 

c.        送審APPWindows市集支援的瀏覽器版本?

                                 請用IE10上傳app

 

d.        為何我的App送審後一直停在第一個步驟?

                            i.       請確認送審畫面是否出現警告的訊息? 若有,則請您先排除警告訊息才能開始審核。

狀況一 :

clip_image002[4]

狀況二:

 

clip_image004[4]

 

排除方法,請參考W-8 稅金設定檔”、”信用卡驗證”。

 

e.        如何填寫稅金表單(W-8BEN )?

請參考W-8 稅金設定檔”、”

 

f.         發票需要統一編號,怎麼處理?

完成購買,並收到發票後,請寄回台灣微軟帳務中心(FMP 住址:  台北市萬華區長沙街266),註明欲加註統編即可。

請參考: http://support.microsoft.com/gp/Invoice/zh-tw

 

g.        APP已經上架後,如何修改名稱?

請參考網站說明

 

    5.         我的 Windows 8 App 被退件了?

            請先確認被退件原因編號,每個編號的原因請參考認證需求

            常見退件原因:

1.2 當客戶從 Windows 市集取得您的應用程式時,請務必提供完整功能。

Windows 市集只提供功能完整的應用程式,如此才能為客戶帶來最佳的經驗。只要測試人員發現您的應用程式尚未完成,應用程式認證就會失敗。

您可以在送出應用程式之前先進行全面測試,或者是提供我們全面測試您應用程式所需的資訊,這對我們很有幫助。例如,如果您的應用程式需要登入認證,請提供示範帳戶。如果您的應用程式需要存取伺服器,請告訴我們需要執行哪些動作才能確認應用程式正常運作。

3.8 您的應用程式必須符合低功率電腦的基本效能準則
  • 應用程式必須在 5 秒或更短的時間內啟動
  • 應用程式必須在 2 秒或更短的時間內暫停

如需低功率電腦的資訊,請參閱如何使用 Windows 應用程式認證套件測試應用程式

4.1 您的應用程式必須符合下列隱私權相關需求:
4.1.1 如果您的應用程式具備網路通訊功能,則必須包含隱私權聲明

如果您的應用程式具備可傳輸資料的技術能力,您就必須維持一份隱私權原則。您還必須在應用程式的「描述」頁面以及 Windows 設定快速鍵顯示的應用程式設定中,提供您的隱私權原則存取方法。

(解決方法見請見文章”最常見的退件原因- 隱私權聲明”)

6.2 應用程式必須有 Windows 年齡分級,而且如果您有應用程式的第三方分級,請一併送出

您必須指派一個最準確符合您應用程式的 Windows 市集年齡分級。 [年齡分級] 頁面針對適用於每個 Windows 市集年齡分級的內容,提供更詳細的描述。

(若您開發遊戲App,請另參考文章開發Windows 8 遊戲App? 教您如何符合台灣遊戲軟體分級規定”)

6.5 您必須將應用程式當地語系化為可支援的所有語言

您的應用程式可以只支援 Windows 市集允許的語言,而其中至少一個語言必須是認證語言。應用程式必須在支援的所有語言中提供類似的使用經驗。

您必須以應用程式套件中宣告的每種 語言,提供詳細的應用程式介紹供客戶參考。 應用程式介紹的其他元素 (例如螢幕擷取畫面、文字以及宣傳影像) 必須當地語系化。如果您的應用程式已當地語系化,但部分功能無法以當地語系化版本提供,您必須在應用程式介紹中清楚陳述或說明當地語系化的限制。

[本 FAQ 將不定期持續更新]

 

 

 

 

 

 

程式碼下載- 將 Blogs 轉為 Windows 8 App

在”將部落格轉成 Windows Store App – 並加入「搜尋」功能”的文章中,你應該已經發現,只要有部落格的 Blog RSS/Atom feeds,就可以很快的完成一個 Windows Store App,您可在此下載程式碼 (Source code downoad)。

 

我透過此方法將個人目前的三個 Blogs 集結起來,也已成功上架: http://apps.microsoft.com/windows/zh-TW/app/raymond-tsais/646c20eb-601c-4479-8b2d-d64e9c7f5456:

image

 

若各位有興趣依此程式作實作的話,請注意以下幾點:

1. 如前文步驟一的說明,請在 FeedData.cs 的 GetFeedsAsync() 方法中,將您要訂閱的RSS/Atom 連結加入:

image

 

2. 請記得要修改 App Name 及 Display Name,尤其在 .appxmanefest 之中:

image

3. 由於這個 App 需要用到網際網路連線,若要成功上架到 Windows Store 上的話,就要加上隱私權聲明的連結,但在此範例檔中各位只要修改 App.xaml.cs 這個檔案,將以下連結改成您的連結即可:

image

若要了解更多隱私權聲明細節,可參考: 隱私權聲明-最常見的退件原因從無到有- 程式碼小於 50 行的 Windows Store App 開發及上架之旅 (程式供下載)

 

4. 最後請在其他功能,及排版、底色、Logos 等方面發揮你的創意喔!

請記得在 2013/01/31 前上傳您的 Windows Store App(s)

原因其實是因為這個 「Windows 8 App 開發者聯盟」的活動:

image

也就是前 200 名上傳的可以說直接取回你的 Windows Store 個人帳號註冊費! 更何況有得大獎的機會,快加緊腳步吧!

報名網址: http://www.microsoft.com/taiwan/promo/Win8AppFest/activity.aspx

(若有 Windows Store 註冊、上架等問題,解決辦法都可以在本 Blog 文章中找到)

5 分鐘讓您的 Windows Store App 具備「分享」(Share Contract) 功能

Windows 8 的一大特色: 由右側螢幕滑出來的 Charms Bar,大概是 Win8 平版電腦的使用者最常看到的畫面之一了:
image
其中,要在 Windows Store App 內實作「搜尋」(Search) 的功能,我已經在 “從無到有- 程式碼小於 50 行的 Windows Store App 開發及上架之旅 (程式供下載)” 以及 “將部落格轉成 Windows Store App (在 Blog Reader sample 中加入「搜尋」功能” 中簡單說明了兩種可以實行的方法。
今天的主題則是要說明如何將「分享」(Share) 的功能加到 Windows Store App之中,讓使用者可以將內容透過 Facebook, Email, Plurk, WordPress 等其他 Apps 分享出去。因為實際的 coding 實在太簡單了,所以先說明一下 Share Contract 的背景知識。
Windows Store App 可以「分享」出去的內容包括以下七種:
  • 純文字 (Plain Text)

  • 統一資源識別元 (URI)

  • HTML

  • 格式化文字

  • 點陣圖 (Bitmap)

  • 檔案

  • 開發人員定義的資料

你可以任意組合以上的幾種內容來作分享,比如你想分享一段純文字加上一個URI連結、或是想分享一張圖片;那麼可以接受這個組合的 Targeted Apps 就會出現在右方,讓使用者作選擇。
image
而以上的這七種內容,其實都是被包含在 DataPackage 這個物件之中,所以你可以看到 DataPackage 物件的所有 set* 方法其實就是在設定以上的七種內容:
image
除了要設定 DataPackage 這個物件之外,另一個要作的事是先取得 DataTransferManager 的目前執行個體,這個 DataTransferManager 個體會有一個 datarequested 事件,使用者點選分享時就會引發這個事件;也就是說,你只要在這個事件方法中,將 DataPackage 的七種內容作組合,你的工作就完畢了!
開始 Coding!
為方便起見,我直接拿”將部落格轉成 Windows Store App” 的這篇文章,最後完成的程式碼(按此下載)來作說明,並假設我們想分享的是其中一篇部落格文章的連結 (URI)。
第一步:因為我們想分享的是文章連結 (URI),所以我們打開 SplitPage.xaml.cs 檔來作修改。連結的資訊是存在 seletedItem: FeedItem 這個物件中,所以我們把它設為全域變數好在其他地方作處理,並記得在 LoadState() 方法中拿掉此變數的宣告。
        // 將 selectedItem 設為全域變數 global variable 
        FeedItem selectedItem;
image
在 LoadState() 拿掉變數宣告後的部份程式碼如下:
image
第二步:在 LoadState() 方法的最後,加入一個 event handler: OnDataRequested:
    // Register for DataRequested events
    DataTransferManager.GetForCurrentView().DataRequested 
                    += OnDataRequested;

image

同時在 SaveState() 方法的最後,移除這個OnDataRequested 的 event handler:
    // Deregister the DataRequested event handler
    DataTransferManager.GetForCurrentView().DataRequested 
                    -= OnDataRequested;
image
第三步:就是實作這個 onDataRequested() 了,其中我用到了 SetUri() 來設定 URI 連結:
    // 實作 OnDataRequested()
    void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
    {
        var dataPackage = args.Request.Data;
        dataPackage.Properties.Title = selectedItem.Title + " by " 
                                       + selectedItem.Author;
        dataPackage.Properties.Description = selectedItem.Content;
        dataPackage.SetUri(selectedItem.Link);
    }
這樣就完成囉!
你可以注意到,其中最關鍵的部份僅在於設定 DataPackage 這個物件而已 (第三步),之後 Windows 8 就會處理由使用者選擇分享、列出合適的 Target Apps,再將分享內享傳遞出去的所有過程了。以下是完成後的執行畫面:
image
imageimage
如果要了解更詳盡的分享機制及進一步的應用,可以閱讀以下文章:
分享與接收內容 (使用 JavaScript 和 HTML 的 Windows 市集應用程式) (Windows)  
快速入門:分享內容 (使用 C#/VB/C++ 和 XAML 的 Windows 市集應用程式) (Windows)
同時更多的 sample code 範例程式都可在以下找到:
Windows Store app samples (可以直接搜尋找到你想用的程式碼)

將部落格轉成 Windows Store App – 並加入「搜尋」功能

以下這個分成五個部份的 step-by-step 文章,是個學習 Windows 8 App 開發很好的出發點;而文章的第五個部份: 建立部落格閱讀程式,則提供了開發者直接將某部落格轉成 Windows 8 App 的一條捷徑。
http://msdn.microsoft.com/zh-tw/library/windows/apps/hh974581.aspx 
image
 
本文的目的即是:
1. 修改 Sample Code 以讀取自訂的 Blogs RSS/Atom feeds
2. 加入Search contract 讓使用者能搜尋文章內文部落格標題
開始 Coding!
(若想直接觀看結果或下載程式碼請至: 程式碼下載- 將 Blogs 轉為 Windows 8 App)
1. 修改 Sample Code 以讀取自訂的 Blogs RSS/Atom feeds
首先至 Windows 8 App 範例程式集散地取得 Sample Code,另外有 JavaScript 版本可供下載,以下我則以 C# 為例作說明。
image
下載 C# Sample Code 並解壓完畢,以 Visual Studio 2012 打開 GettingStarted_CSTutorials.sln 後,先將 WindowsBlogReader 設為起始專案,然後按 F5 ,確認可正常編譯並能順利執行及開啟第一個畫面:
image
接下來就要把我們想訂閱的部落格加進去了!
首先當然要準備好某個部落格的 RSS/Atom feeds,舉例而言本站文章的 RSS 即為 http://blogs.msdn.com/b/mengtsai/rss.aspx
image
然後在 FeedData.cs 的 GetFeedsAsync() 方法中,將您要訂閱的RSS/Atom 連結加入:
image
就這樣! 我們已經完成本文章的第一個目的了! 微笑
以下是 run 起來的樣貌:
imageimage
接下來是重頭戲! 當您的 Blogs 數目及文章數眾多時,提供一個合適的搜尋功能就非常重要了:
2. 加入Search contract 讓使用者能搜尋文章內文部落格標題
要在您的 Windows Store App 加入 Search contract 有幾種不同的方式,其中一種描述在我的另一篇文章中,在這我介紹另一種方式,您只要三個步驟就能加入搜尋功能!
步驟一: 首先打開 Package.appxmanifest 檔案,並加入「搜尋」 (Search) 的宣告 (Declaration):
image 
步驟二: 現在要作的是,讓使用者能夠搜尋某部落格的文章內文 (Content),並將含有此搜尋字串的文章列出來。因為要搜尋文章內文,我們就先打開 SplitPage.xaml.cs 檔案,然後在 SplitPage 的 constructor 中加入一個 event handler,來接收使用者由 Charms bar->搜尋->鍵入字串->然後按 Enter 的動作:
    Windows.ApplicationModel.Search.SearchPane.GetForCurrentView().QuerySubmitted 
        += SplitPage_QuerySubmitted;
image
接下來我們要將 feedData 設為全域變數 (global variable), 這樣在 SplitPage_QuerySubmitted() 方法中才能存取到這個變數,因此我們在 SplitPage class 的第一行即宣告此變數,然後記得在 LoadState() 及 SaveState() 這兩個 methods 中拿掉 feedData 的宣告:

image

image

image

步驟三: 就是實作 SplitPage_QuerySubmitted()  方法了:
    void SplitPage_QuerySubmitted(
           Windows.ApplicationModel.Search.SearchPane sender, 
           Windows.ApplicationModel.Search.SearchPaneQuerySubmittedEventArgs args)
    {
        this.DefaultViewModel["Items"] = from dynamic item in feedData.Items
                                         where
                                         item.Content.Contains(args.QueryText)
                                         select item;
    }
您可以看到我是使用 LINQ 語法在 feedData.Items 的 Content 中,檢查是否有吻合使用者的搜尋字串 (arg.QueryText),然後透過 DefaultViewModel 作顯示,以下是 run 起來的畫面:

image

你可以想見,這個搜尋的功能可以進一步的延伸下去,只要修改 LINQ 語法,並在合適的 page 之中作修改即可。
舉例而言,假設我的部落格數目非常多,我想提供使用者搜尋部落格的標題 (Title) 的話,同樣是三個步驟如下:
步驟一: 打開 ItemsPage.xaml.cs 檔案,並在 ItemsPage() 的 constructor 之中加入一個 event hander :
  Windows.ApplicationModel.Search.SearchPane.GetForCurrentView().QuerySubmitted 
      += ItemsPage_QuerySubmitted;
步驟二: 將 feedDataSource 設為全域變數並在 LoadData() 中將宣告拿掉。

image

步驟三: 實作 ItemsPage_QuerySubmitted() 方法如下,您會注意到我修改了 LINQ statement ,改由在 feedDataSource.Feeds 中找尋 Title (標題):
    void ItemsPage_QuerySubmitted(
    Windows.ApplicationModel.Search.SearchPane sender,               
    Windows.ApplicationModel.Search.SearchPaneQuerySubmittedEventArgs args)
    {
       this.DefaultViewModel["Items"] = from dynamic item in feedDataSource.Feeds
                                        where
                                        item.Title.Contains(args.QueryText)
                                        select item;
    }
完成之後,搜尋部落格標題的結果如下:

image

We are done! 微笑
程�����碼下載 (Source Code download)

Windows Store App 上架步驟 (及竅門分享)

Windows 8 App 是統一透過https://appdev.microsoft.com/StorePortals/ 網站作上傳,過程中基本上不會遇到什麼困難,因為步驟由上到下非常簡明易懂;若要知道各步驟的詳細說明,則可以見Windows 8 App 上傳步驟的分享。
image
以下則是列出一些請大家特別注易的眉角:
第一: 應用程式名稱
image
如您所見,應用程式名稱可以在 App 還沒開發完畢前就先行註冊! 而且可以保留一年;也就是說您心中若有理想的 App 名稱,是有可能被別人捷足先登喔! 另外,應用程式名稱取得好壞與否常常攸關被搜尋到的機會及下載量,這部份請務必作好選擇。
第二: 設定「試用版」(適用於付費軟體)
若您的 App 是要收費的話,在“銷售詳細資料”的步驟中,強烈建議您設定「免費試用期」;這樣您的App出現在 Windows Store 市集時,會多出一個「試用版」的選項讓使用者下載。
由Windows Phone marketplace 上的經驗,這麼作平均會提升70倍的下載量及10倍的總付費數目!
image
第三: 若您是遊戲類 App
而且有選擇在台灣市場上市的話,就要遵循台灣的分級法規上傳CSRR憑證檔案。詳細的作法請參考: 開發Windows 8 遊戲App? 教您如何符合台灣遊戲軟體分級規定
image
第四: 請填寫「測試人員注意事項」
如果要讓您的App能順利過關,強烈建議要填寫此項目,簡單告訴測試人員(用英文)如何操作您的App。
image
上傳完畢之後,你就可以隨時在「儀表版」(Dashboard )中查看 App 的審核進度,同時也會收到 Email 通知審核結果。
以我的例子而言,我於2012/9月就註冊 Windows Store 帳號,一直到2012年底都沒有完成信用卡身份驗證的部份,所以 App 上傳後就看到了以下的畫面,其中紅字的部份為: “在您驗證付款方式之前,我們無法在市集中列出您的應用程式。”
我完成證的方法請見信用卡驗證文章分享。
image
完成驗證之後,就靜待審核通知了!
附記:
(我這個小App是在2012/12/31晚上完成上傳,在2013/01/03就收到 Email 通知已通過審核了,但我的個人經驗不代表每個 App 的狀況喔!)
台北市公車動態 Windows Store App 下載 http://apps.microsoft.com/windows/zh-TW/app/6361e437-53ea-4dfe-9042-72f32ddd0643
image

從無到有- 程式碼小於 50 行的 Windows Store App 開發及上架之旅 (程式供下載)

本計畫是: 要趁著在 2012 年底時,撰寫一個程式碼小於50行的簡單小程式,並且將整個開發過程及上架流程作一個記錄讓大家參考:
首先我的 App 名稱為”台北市公車動態”,目標客戶是針對台北市的公車一族,讓他們能:
1. 隨時查詢想搭公車的預估到站時間。
2. 可以將常用公車加到「我的最愛」之中;同時希望讓使用者即便使用不同的裝置,也能看到一樣的「我的最愛」公車列表。
3. 實作「搜尋」合約,讓使用者可直接透過右側常用工具列 (Charms Bar) 來直接搜尋公車動態。
我首先簡單勾勒一下 App 的未來主畫面如下:
image
開始coding!
於 Visual Studio 2012 中開啟一個 C# 的空白 Windows 市集專案,打開 MainPage.xaml ,將以上的控制項由左側的「工具箱」中直接拉入設計畫面中,接下來在各控制項之中加入 x:Name 參數,以方便日後在程式碼中能直接操作這些控制項。 
image
接下來我需要台北市的公車列表清單,這資料可以在台北市公車動態資訊的公開網站 (http://pda.5284.com.tw/MQS/businfo1.jsp) 中找到,只要在此網站中按右鍵->檢視原始檔,就會看到一個 routeArray 變數中含有完整的公車列表:
image
直接拷貝這個 routeArray 清單,然後在 MainPage.xaml.cs 的 OnNavigatedTo() 方法中加到 comboBusLine 控制項中:
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        string[] routeArray = { "0南", "0東", "1", "108", "108區(二子坪)", "以下省略"};
        for(int i = 0; i < routeArray.Length; i++)
        {
            comboBusLines.Items.Add(routeArray[i]);
        }
        comboBusLines.SelectedIndex = 0;
    }
我們要到哪裡查詢公車即時動態呢? 我發現在 http://pda.5284.com.tw  的網站中,查詢公車動態頁面的Url只是加上”公車號”作為 query string:
image
所以我們可以實作「查詢」 Button 的方法如下:
    private void Button_Query_Click_1(object sender, RoutedEventArgs e)
    {
        string strSelectedBus = comboBusLines.SelectedValue.ToString();
        webviewQuery.Source = 
        new Uri(Uri.EscapeUriString("http://pda.5284.com.tw/MQS/businfo2.jsp?routeId=" 
        + strSelectedBus));
    }
其中使用了 EscapeUriString() 是要避免在 Uri string 之中出現中文亂碼。
按 F5 測試之後應該就能看到 WebView 控制項會顯示如下畫面:
image
之後,要開始實作「我的最愛」功能了。這部份同時要使用到 Windows 8 的資料漫遊 (Raoming) 機制,讓使用者若以同一個 Microsoft ID 登入不同的裝置,都能看到相同的「我的最愛」公車列表。
為達到此目標,首先在MainPage.xaml.cs class中宣告一個 Windows.Storage.ApplicationDataContainer 物件:
    public Windows.Storage.ApplicationDataContainer roamingSettings = 
Windows.Storage.ApplicationData.Current.RoamingSettings;
然後實作「加入我的最愛」 Button 的程式碼如下,記得在我的最愛及 roaming 物件中都要新增:
    private void addToFavorite_Click_1(object sender, RoutedEventArgs e)
    {
        string strBusToAdd = comboBusLines.SelectedItem.ToString();
        if (strBusToAdd.Length > 0 && !myFavorite.Items.Contains(strBusToAdd))
        {
            this.myFavorite.Items.Add(strBusToAdd);
            roamingSettings.Values["MyFavorites"] += strBusToAdd + ",";
        }
    }
同時,「刪除」Button的程式碼如下,記得要在我的最愛及 roaming 物件中皆要作刪除:
    private void delete_bus(object sender, RoutedEventArgs e)
    {
        if (myFavorite.SelectedItem != null)
        {
            string strTmp = roamingSettings.Values["MyFavorites"].ToString();
            roamingSettings.Values["MyFavorites"] =
                strTmp.Remove(strTmp.IndexOf(myFavorite.SelectedItem.ToString()), 
                myFavorite.SelectedItem.ToString().Length);
            myFavorite.Items.Remove(myFavorite.SelectedItem);
        }
    }
最後,記得要在程式一開始的時候,即 OnNavigatedTo() 的方法中,檢查是否存在既有的「我的最愛」清單並匯入:
    if (roamingSettings.Values["MyFavorites"] == null)
    {
        roamingSettings.Values["MyFavorites"] = "";
    }

    strFavorites = roamingSettings.Values["MyFavorites"].ToString().Split(',');
    for (int i = 0; i < strFavorites.Length-1; i++)
    {
        this.myFavorite.Items.Add(strFavorites[i]);
    }
至此,我們已經完成文章一開頭所要完成的第1、2項功能了!
接下來要實作第3項的「搜尋」功能,首先在專案中新增一個「搜尋合約」的新項目:
image
image
然後打開 SearchResultsPage1.xaml 後拉入一個 WebView 控制項。
之後在 SearchResultsPage1.xaml.cs 的 Filter_SelectionChanged() 方法中實作:
    void Filter_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string[] routeArray = { "0南","0東","1","108","108區(二子坪)","以下省略"};

        if (routeArray.Contains(strQuery))
        {
            searchWebView.Source = 
            new Uri(Uri.EscapeUriString("http://pda.5284.com.tw/MQS/businfo2.jsp?routeId=" 
            + strQuery));
            VisualStateManager.GoToState(this, "ResultsFound", true);
        }
        else
        {
            VisualStateManager.GoToState(this, "NoResultsFound", true);
        }
    }
就簡單完成我們的第3項功能了! 最後為了讓畫面不致太單調,我加入一個台北的夜景作為背景:
首先將圖片檔直接拉到 Assets 的資料夾之中,就能在 Grid 中作好背景設定:
image
為了能讓此程式順利上架 Windows Store ,需要準備一些 logos ,如程式一開始的 Splash screen logo、出現在 Windows Store市集時的logo等,這部份我是用一個 Syncfusion 公司提供,目前免費的工具來製作http://www.syncfusion.com/downloads/metrostudio. 製作時記得在.appxmanifest之中查一下所需logos的大小喔!
image
同時,因為我的確使用了網際網路 (Internet) 的功能,所以必需宣告隱私權原則 (延伸閱讀:  最常見的退件原因- 隱私權聲明),我的作法如下:
第一步: 我在Windows Azure Web Site上直接建立了一個「網站」,並套用了WordPress Blog的範本。
第二步: 我草擬了一份簡單的隱私權聲明後,發佈在以上剛建立的Blog網站中 (http://mengtsai.azurewebsites.net/?p=51)。
第三步: 在App.xaml.cs中加入以下程式碼,讓使用者可以在Charms Bar的設定中找到「隱私權」的連結:
        private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
        {
            UICommandInvokedHandler handler = 
                     new UICommandInvokedHandler(onSettingsCommand);

            SettingsCommand privacy1Command = 
                     new SettingsCommand("privacystatementPage", "隱私權原則", handler);

            args.Request.ApplicationCommands.Add(privacy1Command);
        }
        async void onSettingsCommand(IUICommand command)
        {
            SettingsCommand settingsCommand = (SettingsCommand)command;
            if (settingsCommand.Id.ToString().Equals("privacystatementPage"))
            {
                var success = 
                     await Windows.System.Launcher.LaunchUriAsync(
                             new Uri(@"http://mengtsai.azurewebsites.net/?p=51"));
            }
        }
並記得在同一檔案的 OnLanuched() 方法最後,加入以下這行,以登記 OnCommandsRequested() 這個 event:
   // Register handler for CommandsRequested events from the settings pane
   SettingsPane.GetForCurrentView().CommandsRequested 
                                   += OnCommandsRequested;
  
我親自撰寫的程式碼部份僅止於此,若不計開發工具自動產生的程式碼的話,是個總計不到50行statements的簡單App。這個第一版本的 App 跑起來的長相大致如下:
screenshot_01012013_204042
搜尋畫面的部份:
screenshot_01012013_204338
下一篇文章則會記錄上架的過程及需要注意的眉角!
程式碼下載 (Source code download)