2011-09-18 35 views
13

Tôi đang cố gắng kết hợp một ứng dụng kiểu Windows 8 đơn giản trong C# với thông báo lát gạch nhưng tôi dường như không làm cho chúng hoạt động.Thông báo về Ngói Metro trong C#

Điều tôi chưa thể đoán ra chính là nơi mã để cập nhật thông báo lát phải nằm. Tôi đã có một cái nhìn tại Javascript sample, nhưng tôi không nhìn thấy cách thức hoạt động trong một ứng dụng C#. Có ai có một số mẫu mã hoặc một mẹo nhanh chóng về nơi cập nhật gạch nên xảy ra trong một ứng dụng tàu điện ngầm C#?

Trả lời

15

Sự hiểu biết của tôi là mọi ứng dụng đều quyết định nơi thực hiện việc này cho chính nó. Thông thường, bạn sẽ làm điều đó bất cứ khi nào bạn cũng cập nhật giao diện người dùng thông thường của mình với cùng một dữ liệu - ví dụ: nếu ứng dụng của bạn là trình đọc RSS và bạn vừa tải xuống một mục mới để hiển thị, đó là nơi bạn cũng cập nhật ô của mình bằng cách đăng thông báo. Trong ứng dụng JavaScript mẫu, điều này được thực hiện từ các trình xử lý sự kiện cho các điều khiển để thuận tiện.

Đối với mã để thay đổi ô, nó sẽ gần giống với phiên bản JavaScript, vì trong cả hai trường hợp bạn sử dụng Windows.UI.Notifications namespace. Sau đây là một ứng dụng C# rất đơn giản cập nhật ô xếp khi bạn nhấp vào nút. XAML:

<UserControl x:Class="TileNotificationCS.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    d:DesignHeight="768" d:DesignWidth="1366"> 
    <StackPanel x:Name="LayoutRoot" Background="#FF0C0C0C"> 
     <TextBox x:Name="message"/> 
     <Button x:Name="changeTile" Content="Change Tile" Click="changeTile_Click" /> 
    </StackPanel> 
</UserControl> 

và mã sau:

using System; 
using Windows.Data.Xml.Dom; 
using Windows.UI.Notifications; 
using Windows.UI.Xaml; 

namespace TileNotificationCS 
{ 
    partial class MainPage 
    { 
     TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication(); 

     public MainPage() 
     { 
      InitializeComponent(); 
     } 

     private void changeTile_Click(object sender, RoutedEventArgs e) 
     { 
      XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText01); 
      XmlElement textElement = (XmlElement)tileXml.GetElementsByTagName("text")[0]; 
      textElement.AppendChild(tileXml.CreateTextNode(message.Text)); 
      tileUpdater.Update(new TileNotification(tileXml)); 
     } 
    } 
} 

Đừng quên rằng bạn cần một gạch rộng cho văn bản xuất hiện - để có được nó, thiết lập một số hình ảnh cho "Logo Wide" trong gói .appxmanifest.

+0

Ah! Gạch của tôi vẫn là hình vuông. Thay đổi nó thành cái rộng và nó hoạt động. –

1

Đảm bảo bạn thay đổi Xoay ban đầu thành Cảnh, đặt một số hình ảnh cho Widelogo và sử dụng phương pháp này để đặt văn bản cùng với thời gian hết hạn.

void SendTileTextNotification(string text, int secondsExpire) 
     { 
      // Get a filled in version of the template by using getTemplateContent 
      var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText03); 

      // You will need to look at the template documentation to know how many text fields a particular template has  

      // get the text attributes for this template and fill them in 
      var tileAttributes = tileXml.GetElementsByTagName(&quot;text&quot;); 
      tileAttributes[0].AppendChild(tileXml.CreateTextNode(text)); 

      // create the notification from the XML 
      var tileNotification = new TileNotification(tileXml); 

      // send the notification to the app's default tile 
      TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification); 
     } 

Dưới đây là một lời giải thích chi tiết http://www.amazedsaint.com/2011/09/hellotiles-simple-c-xaml-application.html

Các vấn đề liên quan