馬寧的Windows Phone 7.1初體驗(三)——Tile

來源:互聯網
上載者:User
文章目錄
  • 實現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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.