本ブログはアフィリエイト広告を利用しています。

C#でToast表示する

必要なライブラリ

Microsoft.Toolkit.Uwp.NotificationsをNuGetでインストールします。
さらに、.csprojのTargetFrameworkを修正していきます。
https://learn.microsoft.com/ja-jp/windows/apps/design/shell/tiles-and-notifications/send-local-toast?tabs=uwp#step-1-install-nuget-package
ここにある通り、TargetFrameworkを修正しないと.Show()が使用できません。
元が

<TargetFramework>net7.0-windows</TargetFramework>

だとすると

<TargetFramework>net7.0-windows10.0.17763.0</TargetFramework>

のようにする必要があります。
後ろに追加するバージョンはエラー一覧にも出ますが以下から選びます。(2023/3/20現在)

  • 10.0.22621.0
  • 10.0.22000.0
  • 10.0.20348.0
  • 10.0.19041.0
  • 10.0.18362.0
  • 10.0.17763.0

通知の実行

以下、どちらでも通知できます。お好きな方で実装してください。

new ToastContentBuilder()
    .AddArgument("action", "viewConversation")
    .AddArgument("conversationId", 9813)
    .AddText("header string") // ヘッダになる
    .AddText("body string") // 本文になる
    .Show(); // TargetFrameworkを編集していないとこのメソッドは見つからず、エラーになる
new ToastContentBuilder()
.AddHeader("9813", "header string", "action=viewConversation&id=9813")
.AddText("body string")
.Show();
  1. Header を ToastContent に追加します。
  2. 必要な Id、Title、Arguments プロパティを割り当てます。
  3. 通知を送信します (詳細情報)。
  4. 別の通知で同じヘッダー ID (Id) を使用して、それらの通知を同じヘッダーの下にまとめます。 Id は複数の通知をグループ化するかどうかの判断に使用される唯一のプロパティであり、これが同じであれば、Title や Arguments が異なっていても同じグループに分類されます。 Title と Arguments は、グループ内の最新の通知のタイトルと引数が使用されます。 その最新の通知が削除された場合、2 番目に新しい通知が繰り上がって最新となり、その通知の Title と Arguments が使用されます。
https://learn.microsoft.com/ja-jp/windows/apps/design/shell/tiles-and-notifications/toast-headers?tabs=builder-syntax#add-a-header-to-a-toast

上記の引用にある通り、同一グループにまとめる場合はconversationIdをアプリで統一する必要があります。
まとめなくてもいい場合は適当にランダムな値でも設定すれば良いでしょう。また、IDは数値じゃなくても可です。

また、通知を表示するタイミングも指定可能です。あとでトースト表示したい場合はScheduleメソッドを使用します。
Scheduleメソッドの引数としてDateTimeを指定することで特定の日時にトースト表示することができます。
以下は60秒後にトースト表示するコード例です。

new ToastContentBuilder()
    .AddHeader("9813", "header string", "action=viewConversation&id=9813")
    .AddText("body string")
    .Schedule(DateTime.Now.AddSeconds(60));

参考

関連

コメント

タイトルとURLをコピーしました