【发布时间】:2012-05-01 02:46:01
【问题描述】:
我正在制作一个新的 WPF 应用程序,我需要能够最小化该应用程序并在时钟旁边(或该一般区域)的系统托盘中保持美观和舒适。
这必须在 Windows XP、Vista 和 7 上运行。我不必支持旧版本的 Windows。
如果我使用 .NET 4,最简单的方法是什么?
【问题讨论】:
标签: c# wpf .net-4.0 system-tray minimize
我正在制作一个新的 WPF 应用程序,我需要能够最小化该应用程序并在时钟旁边(或该一般区域)的系统托盘中保持美观和舒适。
这必须在 Windows XP、Vista 和 7 上运行。我不必支持旧版本的 Windows。
如果我使用 .NET 4,最简单的方法是什么?
【问题讨论】:
标签: c# wpf .net-4.0 system-tray minimize
我已经成功地在 WPF 中使用了这个免费的通知图标实现。
http://www.hardcodet.net/projects/wpf-notifyicon
设置非常简单,并且提供了源代码。它不依赖于 Windows 窗体,因此它是“纯”WPF 并且非常可定制。
您可以在CodeProject 上找到有关如何使用它的教程。
这是Nuget Package
【讨论】:
这里有一个简单的例子来展示如何最小化通知区域。您需要添加对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);
}
}
【讨论】:
embedded resource。然后可以通过以下方式访问该图标:Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YOUR_NAMESPACE.ICON_FILENAME")) 并在 NotificationIcon 上设置,如答案ni.Icon = new System.Drawing.Icon(stream);
base.OnStateChanged(e) 的存在会导致堆栈溢出。
从工具箱将notifyIcon 添加到您的应用程序中。
选择您的主要form >> 转到Properties >> 选择Events 图标>> 在FromClosing event 下输入MainForm_FormClosing >> 回车。
在打开的.cs 文件中输入以下事件操作:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
notifyIcon.Visible = true;
ShowInTaskbar = false;
e.Cancel = true;
}
现在,当您单击 X 按钮时,您的主 FORM 窗口将最小化到系统托盘。下一步是让 FORM 恢复正常状态。
转到您的notifyIcon 的Properties >> 找到DoubleClick event >> 输入NotifyIcon_DoubleClick 并回车以获取为您创建的事件函数。
将此代码放入您的活动中:
private void NotifyIcon_DoubleClick(object sender, EventArgs e)
{
this.Show();
notifyIcon.Visible = false;
}
现在,如果您想制作花哨风格的通知图标,您可以添加上下文菜单并将其链接到您的通知图标,这样您就会得到类似的东西:
这里是将 contextMenuStrip 链接到 NotifyIcon 的地方:
祝你好运!
【讨论】: