Windows 10 ToastNotification из приложения WinForms - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь показать Windows 10 (UWP) ToastNotification с адаптивным контентом из проекта WinForms. У меня уже есть:

  • Установить TargetPlatformVersion в моем файле .csproj на 10.0.18362.0
  • Добавлены ссылки на Windows.winmd и System.Runtime.dll
  • Установитьявный System.AppUserModel.ID ("Demo.ToastApp") с использованием функции Win32 SetCurrentProcessExplicitAppUserModelID (в самом начале моего Main метода)

Следующий код запускается, когда кнопка в форменажал:

XElement element = new XElement("toast",
    new XElement("visual",
        new XElement("binding",
            new XAttribute("template", "ToastGeneric"),
            new XElement("text", "Line1"),
            new XElement("text", "Line2"),
            new XElement("text", "Line3")
        )
    ),
    new XElement("actions",
        new XElement("action",
            new XAttribute("content", "Button1"),
            new XAttribute("arguments", "action=Button1")
        ),
        new XElement("action",
            new XAttribute("content", "Button2"),
            new XAttribute("arguments", "action=Button2")
        )
    )
);

var xml = new Windows.Data.Xml.Dom.XmlDocument();
xml.LoadXml(element.ToString());

var toast = new ToastNotification(xml);

ToastNotificationManager.CreateToastNotifier("Demo.ToastApp").Show(toast);

Уведомление не появляется. Не генерируется никаких исключений, и событие Failed не запускается.

Однако, если я изменяю XML на следующий (то есть использую устаревший шаблон тоста), уведомление работает:

XElement element = new XElement("toast",
    new XElement("visual",
        new XElement("binding",
            new XAttribute("template", "ToastText04"),
            new XElement("text", new XAttribute("id", 1), "Line1"),
            new XElement("text", new XAttribute("id", 2), "Line2"),
            new XElement("text", new XAttribute("id", 3), "Line3")
        )
    )
);

Это противоречит тому, что я прочитал о тостах (см. Уведомления о тостах из настольных приложений ), в которых говорится, что следует использовать only ToastGeneric и что унаследованные шаблоны (такие какToastText04) нельзя использовать из настольных приложений.

Мне нужен адаптивный контент (в частности, действия, поэтому мое приложение может реагировать по-разному в зависимости от того, на каком из них нажали), и я не вижу, что я делаю неправильно,Может ли кто-нибудь указать мне правильное направление?

(Примечание: я хочу не устанавливать мой System.AppUserModel.ID в ярлык, потому что эта функция в конечном итоге будет находиться в библиотеке классов, и я хочу, чтобы она работала независимо от того,о том, как установлено вызывающее приложение)

...