文章目錄
- 實現Application Tile
- 實現 Secondary Tile
- 寫在最後
- OpenXLive杯Windows Phone遊戲開發大賽
作者:馬寧
前邊介紹Push Notification時,其實已經談到了Tile Notification。在Windows Phone 7.1中,Smart Tile得到了極大的提高。我們不但可以控制Tile的動畫顯示、內容和背景切換,而且還能夠為同一個應用提供兩個Tile,比如一個天氣預報的應用程式,就可以在手機的首頁上顯示多個Tile,一個是北京的天氣,另一個是上海的天氣等。
實現Application Tile
MSDN上的文章寫的又臭又長,其實挺簡單的事情,弄得那麼複雜。我試著改寫了一下例子,加入到應用的一個Button點擊事件裡:
// Application Tile is always the first Tile, even if it is not pinned to Start. ShellTile TileToFind = ShellTile.ActiveTiles.First(); // Set the properties to update for the Application Tile. // Empty strings for the text values and URIs will result in the property being cleared. StandardTileData NewTileData = new StandardTileData { Title = "Title", BackgroundImage = new Uri("Background.png", UriKind.Relative), Count = 2, BackTitle = "Back Tilte", BackBackgroundImage = new Uri("Background2.png", UriKind.Relative), BackContent = "This is BackContent" }; // Update the Application Tile TileToFind.Update(NewTileData);
首先,我們要引用Microsoft.Phone.Shell命名空間,然後通過ShellTile.ActiveTiles.First()方法來擷取應用最主要的ShellTile.每個應用至少會有一個Tile,所以不用擔心該對象為空白。然後我們建立一個StandardTileData對象,為其中的屬性賦值。屬性分為兩組,每組都會有背景圖片、標題和內容,顯示位置如所示。如果設定兩組Tile屬性,則Tile在顯示一段時間後會自動切換。最後,我們調用ShellTile對象的Update方法,將StandardTileData對象傳遞進去,就完成了新Tile的設定。BackgroundImage和BackBackgroundImage指定的是圖片的URI,可以是本地的圖片,也可以是來自網路的圖片。我們使用的兩個圖片,都是以Content方式加入到工程中的圖片。
當我們將程式部署到裝置或模擬器上時,首先會在Application List裡出現對應的表徵圖。我們長按表徵圖,會出現一個菜單,選擇Pin to start,會將應用程式的表徵圖顯示到手機首頁上。
運行應用程式,點擊Button後,Tile會被更新成新的式樣。兩張背景和內容會交替顯示,顯示效果如所示:
實現 Secondary Tile
在完成了Application Tile的顯示之後,我們接下來要實現更複雜的Secondary Tile,當然,我們可以添加多個Tile。在實現Secondary Tile時,有兩個技術點需要實現,一個是Tile的添加與顯示;另一個則是,程式啟動時如何區分是由哪個Tile點擊啟動應用的。
首先,我們來看如何添加Secondary Tile的代碼:
// Look to see whether the Tile already exists and if so, don't try to create it again. ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains("DefaultTitle=FromTile")); // Create the Tile if we didn't find that it already exists. if (TileToFind == null) { // Create the Tile object and set some initial properties for the Tile. // The Count value of 12 shows the number 12 on the front of the Tile. Valid values are 1-99. // A Count value of 0 indicates that the Count should not be displayed. StandardTileData NewTileData = new StandardTileData { BackgroundImage = new Uri("Background.png", UriKind.Relative), Title = "Secondary Tile", Count = 12, BackTitle = "Back of Tile", BackContent = "Welcome to the back of the Tile", BackBackgroundImage = new Uri("Background2.png", UriKind.Relative) }; // Create the Tile and pin it to Start. This will cause a navigation to Start and a deactivation of our application. ShellTile.Create(new Uri("/MainPage.xaml?DefaultTitle=FromTile", UriKind.Relative), NewTileData); } else { TileToFind.Delete(); }
首先調用ShellTile.ActiveTiles.FirstOrDefault方法,擷取在NavigationUri屬性中包含“DefaultTitle=FromTile”字樣的ShellTile對象,如果擷取到的ShellTile對象為空白,則建立Secondary Tile,否則調用ShellTile的Delete方法,刪除這個Tile。
建立Secondary Tile的過程,首先建立StandardTileData對象,將顯示的各個參數進行賦值,這一步與Application Tile相同;然後,調用ShellTile的Create方法,第一個參數是URI,即點擊該Tile後,調用Page的命令列,可以包含參數,第二個參數是StandardTileData對象,用於指定顯示式樣。
需要注意的是,如果Page命令列指定不對,會引起使用者點擊Tile時,應用直接退出,由於無法調試,第一次接觸這個問題時,會找不到具體的原因。
Secondary Tile顯示效果如下:
接下來,我們就要處理區分不同Tile點擊的事件了,需要重載MainForm的OnNavigatedTo方法:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { string value = null; if (this.NavigationContext.QueryString != null) { this.NavigationContext.QueryString.TryGetValue("DefaultTitle", out value); if (value != null) { textBoxTitle.Text = value; } else { textBoxTitle.Text = "FromMain"; } } base.OnNavigatedTo(e); }
通過NavigationContext.QueryString的TryGetValue方法來擷取DefaultTitle參數的值,如果無法擷取到該值,則認為該點擊來自第一個Tile,相反則來自第二個Tile。我們將參數顯示在首頁面的文字框裡,當然,實際應用中可以有更加複雜的商務邏輯。介面顯示效果如下:
到這裡,我們簡單介紹了如何添加Tile、修改Tile內容,除此之外,還有如何修改Tile的初始值,指定Tile更新的時間間隔等。在這裡,我們就不介紹了,大家可以參考又臭又長的MSDN文檔,這部分不長,我可以保證。
寫在最後
好了,到這裡,我們正式將Windows Phone 7.1中的Tile編程的內容介紹完了。Windows Phone採用的是HUB方式,對於功能進行分類,所以,就要求Tile具備更豐富的顯示方式和展現形式。而且,多個應用可以對應於一個Tile,同樣一個應用也可以對應多個Tile,這樣極大提高了首頁與應用之間互動的豐富程度。
當然,具體的Tile,還要在實際的開發中使用,才能真正瞭解其優缺點。
OpenXLive杯Windows Phone遊戲開發大賽
OpenXLive杯Windows Phone遊戲開發大賽,是由OpenXLive聯合國內知名的開發人員社區:DevDiv、智機網、WPMind、Silverlight銀光中國和XNA遊戲世界,一起舉辦的針對Windows Phone遊戲開發的比賽。
http://www.openxlive.net/posts/news/40