首页 > 解决方案 > 如何在 Windows 10 的系统托盘中显示经典的 BalloonTip 而不是 C# 中的 Toast 通知?

问题描述

我正在为 Windows 构建一个基于 .Net 4.7.2 框架的 Windows 窗体应用程序。该应用程序适用于 Windows 10 和 Windows Server 2019 系统。

当用户最小化应用程序并且应用程序进入托盘时,我想在其托盘图标顶部显示一个经典的 BalloonTip,如下所示:

在此处输入图像描述

问题是当我这样做时:

    private void form1_Resize(object sender, EventArgs e)
    {

        if (this.WindowState == FormWindowState.Minimized)
        {
            this.Hide();
            trayIcon.Visible = true;
            trayIcon.ShowBalloonTip(8000);
        }

    }

我的“BalloonTip”在我现在工作的 Windows 10 系统中显示如下:

在此处输入图像描述

我知道这是 Windows 10 的新风格。我还了解了 Windows 组策略及其注册表设置。我不想更改 Windows 的策略。

编辑:此外,Toast 通知仅显示 2-3 秒,而不是我设置的 8 秒...

如何在 C# 中完成此操作?

标签: c#winformssystem-trayballoon-tip

解决方案


也许,Tulpep.NotificationWindow nuget 包可以为您工作。

请看一下这个链接:Foxlearn Notification

编辑:

为自定义气球通知创建您自己的表单并使用以下代码。

请注意,button1 是右上角带有“X”的小按钮,用于关闭。

接下来,在您的表单中添加一个图片框,调整其大小以填充表单并将下面的图像添加到图片框:在此处输入图像描述

然后你可以按照你想要的方式设计通知,添加标签、图片框等。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BubbleNotificationTest
{
    public partial class Form1 : Form
    {
        Timer t = new Timer();
        Timer fadeIn = new Timer();
        Timer fade = new Timer();
        public Form1()
        {
            InitializeComponent();
            Opacity = 0;
            fadeIn.Interval = 100;
            this.BackColor = Color.FromArgb(28, 28, 28);
            this.TransparencyKey = Color.FromArgb(28, 28, 28);
            this.StartPosition = FormStartPosition.Manual;
            this.Location = new Point(Screen.FromControl(this).Bounds.X + 850, Screen.FromControl(this).Bounds.Y + 662);
            fadeIn.Tick += new EventHandler(fadeIn_Tick);
            fadeIn.Start();
            t.Tick += new EventHandler(t_Tick);
            fade.Tick += new EventHandler(fade_Tick);
            fade.Interval = 100;
            t.Interval = 6000;
            t.Start();
        }

        private void fadeIn_Tick(object sender, EventArgs e)
        {
            this.Opacity += 0.05;
            if (this.Opacity == 1)
            {
                fadeIn.Stop();
            }
        }

        private void t_Tick(object sender, EventArgs e)
        {
            fade.Start();
        }

        private void fade_Tick(object sender, EventArgs e)
        {
            this.Opacity -= 0.05;
            if (this.Opacity == 0)
            {
                fade.Stop();
                this.Close();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

这是结果:在此处输入图像描述


推荐阅读