我正在制作一个新的WPF应用程序,需要能够将应用程序最小化并使其漂亮地嵌入到系统托盘中,就在时钟旁边(或者大致在那个区域)。
这必须在Windows XP、Vista和7上运行。 我不需要支持旧版本的Windows。
如果我使用.NET 4,最简单的方法是什么?
我正在制作一个新的WPF应用程序,需要能够将应用程序最小化并使其漂亮地嵌入到系统托盘中,就在时钟旁边(或者大致在那个区域)。
这必须在Windows XP、Vista和7上运行。 我不需要支持旧版本的Windows。
如果我使用.NET 4,最简单的方法是什么?
下面是一个快速示例,展示了如何将窗口最小化到通知区域。您需要添加对 System.Window.Forms
和 System.Drawing
程序集的引用。
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
ni.Icon = new System.Drawing.Icon("Main.ico");
ni.Visible = true;
ni.DoubleClick +=
delegate(object sender, EventArgs args)
{
this.Show();
this.WindowState = WindowState.Normal;
};
}
protected override void OnStateChanged(EventArgs e)
{
if (WindowState == System.Windows.WindowState.Minimized)
this.Hide();
base.OnStateChanged(e);
}
}
我在WPF中使用过这个免费的notify-icon实现,并取得了成功。
http://www.hardcodet.net/projects/wpf-notifyicon
这个实现很容易设置,而且提供了源代码。它不依赖于Windows Forms,因此是'纯' WPF,非常可定制。
您可以在CodeProject上找到有关如何使用它的教程。
这里是Nuget包。
notifyIcon
到你的应用程序。form
>> 进入属性
>> 选择事件
图标 >> 在FromClosing event
下输入MainForm_FormClosing
>> 按Enter键。
在打开的 .cs
文件中输入以下事件操作:private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
notifyIcon.Visible = true;
ShowInTaskbar = false;
e.Cancel = true;
}
现在,当您单击X按钮时,您的主FORM窗口将最小化到系统托盘。下一步是将FORM恢复到正常状态。
进入notifyIcon
的属性
>> 找到DoubleClick事件
>> 输入NotifyIcon_DoubleClick
并按Enter键以为您创建事件函数。
private void NotifyIcon_DoubleClick(object sender, EventArgs e)
{
this.Show();
notifyIcon.Visible = false;
}
这里是将 contextMenuStrip 链接到 NotifyIcon 的位置:
祝你好运!
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YOUR_NAMESPACE.ICON_FILENAME"))
,并像答案中那样设置在通知图标上ni.Icon = new System.Drawing.Icon(stream);
。 - Matthias Tylkowskibase.OnStateChanged(e)
会导致堆栈溢出。 - Emil Mocan