首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用.NET在Windows中创建弹出的“烤面包机”通知

用.NET在Windows中创建弹出的“烤面包机”通知
EN

Stack Overflow用户
提问于 2010-06-14 10:38:21
回答 3查看 72.5K关注 0票数 71

我正在使用.NET,正在创建一个桌面应用程序/服务,当某些事件被触发时,该应用程序/服务将在我的桌面角落显示通知。我不想使用太具侵入性的常规消息框b/c。我希望通知滑入视图,然后在几秒钟后淡出。我正在考虑一种行为非常类似于新邮件到达时收到的Outlook警报的东西。问题是:我应该为此使用WPF吗?我从来没有用WPF做过任何事情,但如果这是最好的方法,我会很乐意尝试的。有没有一种方法可以用常规的.NET库来实现这一点?

EN

回答 3

Stack Overflow用户

发布于 2014-06-18 14:37:45

代码语言:javascript
复制
public partial class NotificationWindow : Window
{
    DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
    public NotificationWindow()
        : base()
    {
        this.InitializeComponent();

        Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() =>
        {
            var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
            var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice;
            var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom));

            this.Left = corner.X - this.ActualWidth;
            this.Top = corner.Y - this.ActualHeight;
        }));
        timer.Interval = TimeSpan.FromSeconds(4d);
        timer.Tick += new EventHandler(timer_Tick);
    }
    public new void Show()
    {
        base.Show();
        timer.Start();
    }

    void timer_Tick(object sender, EventArgs e)
    {
        //set default result if necessary

        timer.Stop();
        this.Close();
    }

}

上面的代码是@Ray Burns方法的精炼版本。添加了时间间隔代码。因此通知窗口将在4秒后关闭。

将窗口调用为,

代码语言:javascript
复制
NotificationWindow nfw = new NotificationWindow();
nfw.Show();
票数 8
EN

Stack Overflow用户

发布于 2015-08-19 15:33:40

代码语言:javascript
复制
NotifyIcon notifyIcon = new NotifyIcon();
Stream iconStream = System.Windows.Application.GetResourceStream(new Uri("pack://application:,,,/Assets/ic_instant_note_tray.ico")).Stream;
notifyIcon.Icon = new System.Drawing.Icon(iconStream);
notifyIcon.Text = string.Format(Properties.Resources.InstantNoteAppName, Constants.Application_Name);
notifyIcon.Visible = true;
notifyIcon.ShowBalloonTip(5000, "tooltiptitle", "tipMessage", ToolTipIcon.Info);
notifyIcon.Visible = false;
notifyIcon.Dispose();
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 20:56:38

请注意,调用线程必须为sta,因为许多ui组件需要它,同时在system.timers.timer elapsed event下编写以下代码

代码语言:javascript
复制
Window1 notifyWin = new Window1();
bool? isOpen = notifyWin.ShowDialog();
if (isOpen != null && isOpen == true)
{
     notifyWin.Close();
}
System.Threading.Thread.Sleep(1000);
notifyWin.ShowDialog();

在window1构造函数下:

代码语言:javascript
复制
public Window1()
{
    InitializeComponent();

    Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(() => { 
        var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
        var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; 
        var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom)); 
        this.Left = corner.X - this.ActualWidth - 100; 
        this.Top = corner.Y - this.ActualHeight; 
    })); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3034741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档