簡體   English   中英

顯示 Windows 10 Toast 通知

[英]Showing a Windows 10 toast notification

我正在用 C# (Visual Studio 2015) 開發一個程序,我想在某種情況下向用戶顯示一條吐司消息。 我從 MSDN 下載了這段代碼,它運行良好:

// Get a toast XML template
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText04);

// Fill in the text elements
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
for (int i = 0; i < stringElements.Length; i++)
{
    stringElements[i].AppendChild(toastXml.CreateTextNode("Line " + i));
}

// Specify the absolute path to an image
String imagePath = "file:///" + Path.GetFullPath("toastImageAndText.png");
XmlNodeList imageElements = toastXml.GetElementsByTagName("image");
imageElements[0].Attributes.GetNamedItem("src").NodeValue = imagePath;

// Create the toast and attach event listeners
ToastNotification toast = new ToastNotification(toastXml);
toast.Activated += ToastActivated;
toast.Dismissed += ToastDismissed;
toast.Failed += ToastFailed;

// Show the toast. Be sure to specify the AppUserModelId on your application's shortcut!
ToastNotificationManager.CreateToastNotifier(APP_ID).Show(toast);

在測試了這段代碼之后,我想將它實現到我的應用程序中。 所以我對它進行了一些更改並嘗試運行它。 錯誤信息:

類型“IReadOnlyList<>”是在未引用的程序集中定義的。 添加對 System.Runtime 的引用,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”(已翻譯)

IEnumerable<>IReadOnlyList<>

錯誤來自這兩行:

for (int i = 0; i < stringElements.Length; i++)
{
    stringElements[i].AppendChild(toastXml.CreateTextNode("Line " + i));

我還嘗試添加對 System.Runtime 的引用。 我用 NuGet ( https://www.nuget.org/packages/System.Runtime/4.0.0/ ) 下載了它。 在那之后,錯誤消失了,但現在我的代碼中的每個單詞都變成了紅色,並帶有諸如“System.Object 未定義”之類的錯誤(但它在我啟動時仍然運行!)。

我能想到的唯一可能的解決方案是 System.Runtime 已經安裝在我的計算機上的某個地方,而 4.0.0 是我程序的錯誤版本。 但我在任何地方都找不到。

PS:這是一個桌面應用程序,而不是一個 Windows-Store 應用程序。

我認為這與此問題中的問題相同您必須添加對

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

PS:如果你有一個只有 Windows 10 的桌面應用程序,你可能想使用新的 toast 系統,MSDN 上的代碼示例使用的是 Windows 8 系統。 它適用於 W10,但沒有所有新功能(微軟發布了官方NuGet包)。

編輯:由於我無法發表評論,我將在此處發布答案:

例外是因為您需要在CreateToastNotifier()提供applicationId

ToastNotificationManager.CreateToastNotifier("MyApplicationId").Show(toast);

它是將在操作中心用於對您的 toast 進行分組的名稱(因此通常,您輸入應用程序的名稱)。 在 Windows 8.1 中,需要注冊您的應用程序 ID(我認為這在 MSDN 的示例中),但現在您只需輸入應用程序的名稱即可。

GetXml()僅適用於WinRT 在桌面上,您需要像使用GetContent()那樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM