【Win10 應用開發】自適應Toast通知的XML文檔結構


老規矩,在開始之前老周先講個故事。

話說公元2015年7月20日,VS 2015發布。於是,肯定有人會問老周了,C#6有啥新特性,我學不來啊。學不來的話你應該檢討。老周比較保守地計算一下,學會C# 6只需要20秒,不信的話,老周筆划筆划一下,你就明白了。

 

1、屬性自動初始化。在4.0中引入了這樣聲明屬性:

public int VVVV { get; set;}

以前是屬性包裝一個字段,在初始化屬性時只要對字段賦值即可,這個省略的語法自然要考慮到初始化的問題,在構造函數中初始化盡管是可以,但不夠簡練,所以很自然地會出現:

public int VVVV { get; set; } = 1000;

所以,這個屬性初始化的表達式不用學,就和普通變量賦值一樣。

 

2、新的字符串格式化。以前是 abc {0} cccc {1},格式化占位符是用序號的,從0開始,依此類推。現在可以這樣:

$"abc {x} ccc {y}",這樣就把序號也忽略了,直接把對應的變量作為占位符就行了,為了和過去的序號占位符區別,前面加了個$符號。

 

3、索引初始化,比如初始化字典類型,可以這樣:

new Dictionary<int, string> {
    [7] = "seven",
    [9] = "nine",
    [13] = "thirteen"
};

這個也不難記,和JSON很像,不過JSON是用冒號(:)來表示字段/屬性賦值的,C#團隊很聰明,不用冒號,還是用回=號,因為=號就是萬能的賦值運算符,所以,實際上是下面代碼的省略:

d[7] = "seven"

賦值語法和變量賦值語法統一,這樣不容混淆。

 

4、屬性和方法可以寫成Lambda表達式。比如這樣

public string NID () => "Hi, " + mName;

只要你以前Lambda表達式學得好的話,一看就明白 () => ... 是返回字符串,然后前面的public string NID的聲明顯然是一個屬性,於是把兩者合起來就是一個只讀屬性。相當於:

get{ return "Hi, " + mName; }

對於方法聲明也是如此:

private int DoSome(int a, int b) => a+b;

相當於:

private int DoSome(int a, int b)

{

    return a+b;

}

和Func<int,int,int>委托所配置的Lambda表達式一樣。

所以說,你lambda基礎過關的話,以上這些都是小玩意兒。

 

5、非空檢查。比如,test?.ToString();如果test為null就不執行代碼,在4.0中有

bool? b; 

int x;

int b= x ?? 100;

如果你對以前的這些基礎扎實的話,這個?基本不用學。

 注意:如果你和老周一樣,正使用Windows 10 SDK工具,那么就要等到29號,SDK正式發布后,才能裝VS2015正式版,這幾天,咱們還是繼續體驗RC版吧。

好了,你自己惦量一下,是不是20秒就能搞定?

=======================================================

 

故事講完了,大家不需要鼓掌。上一篇爛文中曾說過從本文起給大家介紹一下面向Win 10 app的Toast通知和操作中心相關的內容。當然了,目前官方的文檔還不完整,因為SDK還未最終發布,故老周所講的這些內容僅作參,不過,正式版應該不會有太大出入,頂多是對通知的XML文檔做一些規范性處理。

首先要說明的是,在以前8.1時候的Toast通知方式,到了Win 10中依然支持,而且UWP API中也包括了對應的API協定。所以,你仍然可以使用8.1的通知方式,即通過ToastNotificationManager.GetTemplateContent(ToastTemplateType)方法來獲取對應的通知模板,然后用XmlDocument對象來加載和修改XML,當然你也可以直接構造XML文檔,然后用XmlDocument對象來加載。

還有就是操作中心,其實它和Toast是一伙的,即我們不需要用專門的API去操作它,因為Toast通知本身就可以顯示在操作中心里面。

到了Win10 app,Toast通知的模板不再划分為N多種,而只有一種,統一命名為ToastGeneric,也就是通用型通知,這種新的Toast通知也稱Adaptive Toast通知,就翻譯為自適應吧。

整個XML文檔的結構如下:

<toast>
    <visual>
       <binding>
            <text>.....</text>
             ........
             <image ... />
             ........
       </binding>
    </visual>
    <audio />
    <actions>
          <input id="snoozeTime" type="selection" defaultSelection="10">
                    ........
           </input>
           <action ...>
           <action .....>
    </actions>
</toast>

根節點當然是toast的了,這個沒什么可以解釋的,就像磁貼通知的根節點是tile一樣。

根節點下包含兩個家伙,實際上這兩哥們兒已經把toast通知的界面結構描述出來了。

第一部分:visual,就是通知的內容區域,可以包含文本和圖像。

第二部分:actions,即在通知的下方可以顯示按鈕、輸入框、下拉選擇列表這些可以讓用戶操作的控件。就像WP10中的快速回復短信一樣。收到短信后,會在手機屏幕頂部顯示toast通知,然后用戶點一下下拉符號,可以直接在toast通知上輸入回復信息,然后發送。

在Toast元素下,還有一個audio元素,用來配置顯示Toast通知時的聲音,audio元素的使用和8.1一樣。

 

Visual元素下需要放一個binding元素,這和以前一樣。而重點是binding元素的template屬性,這個跟以前不同,在UWP應用中,template統一叫做“ToastGeneric”,你不用再去考慮用哪個模板了,現在就一個名字。

同樣地,binding元素下面可以包含兩個元素:

<text>:表示一行文本,兩個text元素則表示兩行文本,三個就表示三行,通常第一個text元素作為通知的標題。至於說最多能添加多少個text元素,現在還不能確定,通常不會超個四行,畢竟通知內容不應太長。如果想在通知的內容中添加空白行,可以直接寫一個<text />(空的text元素)。

<image>:表示一個圖像。其他屬性和8.1一樣,我這里重點說一下兩個新的屬性。

>>  a、placement,這是可選屬性,如果設置為inline,則表示圖像和文本內聯到一起;如果設置為appLogoOverride,就把應用的默認圖標替換,圖像顯示在通知的左上角。

另外,官方博客里有這么一句話:You can have up to 1 image for each placement value.  placement屬性的各個取值只能出現一次,如果有一個image元素的placement屬性為inline,那么如果通知中還有image元素,那另外的元素的placement屬性只能為appLogoOverride了。

>> b、hint-crop,這也是個可選的屬性,默認值為none,如果設置為circle,則圖標會變成圓形,如果你習慣於正方形圖標,那就不要設置這個屬性了。

 

好了,不講太多了,免得大家吸收不了。關於actions就留到下一篇爛文再說吧。下面給大家直觀地展示一下新Toast通知吧。

先給大家演示一個帶有三行文本和一個圖像的Toast通知。看代碼:

            string xml = "<toast lang=\"zh-CN\">" +
                            "<visual>" +
                                "<binding template=\"ToastGeneric\">" +
                                    "<text>高端應用</text>" +
                                    "<text>看,桃花開了。</text>" +
                                    "<image placement=\"inline\" src=\"ms-appx:///Assets/1.jpg\" />" +
                                    "<text>這桃花好看吧?</text>" +
                                "</binding>" +
                            "</visual>" +
                         "</toast>";
            // 創建XML文檔
            XmlDocument doc = new XmlDocument();
            // 加載XML
            doc.LoadXml(xml);
            // 創建通知實例
            ToastNotification notification = new ToastNotification(doc);
            // 顯示通知
            ToastNotifier nt = ToastNotificationManager.CreateToastNotifier();
            nt.Show(notification);

得到的Toast通知如下圖所示。

 

然后打開通知中心,會看到該通知,點擊通知下方的“向下”箭頭,可以看到通知的全部內容。

 

如果通知顯示不出來,請檢查設置里面是否開啟應用通知。如下圖。

 

想不想看看在手機上運行如何?

 

打開手機的通知中心,也可以看到剛才的通知。

 

下面看看純文本的Toast通知。

            string xml = "<toast lang=\"zh-CN\">" +
                            "<visual>" +
                                "<binding template=\"ToastGeneric\">" +
                                    "<text>來兩句</text>" +
                                    "<text>風聲,雨聲,讀書聲,聲聲入耳</text>" +
                                    "<text>國事,家事,天下事,事事關心</text>" +
                                "</binding>" +
                            "</visual>" +
                         "</toast>";
            // 創建XML文檔
            XmlDocument doc = new XmlDocument();
            // 加載XML
            doc.LoadXml(xml);
            // 創建通知實例
            ToastNotification notification = new ToastNotification(doc);
            // 顯示通知
            ToastNotifier nt = ToastNotificationManager.CreateToastNotifier();
            nt.Show(notification);

通知效果如下。

 

示例源碼下載地址:http://files.cnblogs.com/files/tcjiaan/newToastnotificationApp.zip

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM