我正在使用.NET,正在创建一个桌面应用程序/服务,当某些事件被触发时,该应用程序/服务将在我的桌面角落显示通知。我不想使用太具侵入性的常规消息框b/c。我希望通知滑入视图,然后在几秒钟后淡出。我正在考虑一种行为非常类似于新邮件到达时收到的Outlook警报的东西。问题是:我应该为此使用WPF吗?我从来没有用WPF做过任何事情,但如果这是最好的方法,我会很乐意尝试的。有没有一种方法可以用常规的.NET库来实现这一点?
发布于 2014-06-18 14:37:45
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秒后关闭。
将窗口调用为,
NotificationWindow nfw = new NotificationWindow();
nfw.Show();
发布于 2015-08-19 15:33:40
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();
发布于 2012-05-15 20:56:38
请注意,调用线程必须为sta,因为许多ui组件需要它,同时在system.timers.timer elapsed event下编写以下代码
Window1 notifyWin = new Window1();
bool? isOpen = notifyWin.ShowDialog();
if (isOpen != null && isOpen == true)
{
notifyWin.Close();
}
System.Threading.Thread.Sleep(1000);
notifyWin.ShowDialog();
在window1构造函数下:
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;
}));
}
https://stackoverflow.com/questions/3034741
复制相似问题