当用户单击系统托盘图标时,我想打开一个WPF ContextMenu。对于Windows,这是直截了当的,只需调用notifyIcon.ContextMenu = contextMenu就可以了.
在WPF上,我们不能轻松地设置ContextMenu,因为WPF的ContextMenu类与表单ContextMenu无关。我一直在追求的另一种选择是处理NotifyIcon的Click事件来打开WPF样式的ContextMenu。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// This is intended to be a system tray application so we hide the window
this.Visibility = Visibility.Hidden;
// Winform context menu
// The context menu closes when the user clicks anywhere outside the menu
// The user can navigate the menu with the keyboard arrows and close with ESC
var notifyIcon1 = new System.Windows.Forms.NotifyIcon();
var contextMenu = new System.Windows.Forms.ContextMenu();
var menuItem = new System.Windows.Forms.MenuItem();
menuItem.Text = "WinForm Menu Item";
contextMenu.MenuItems.Add(menuItem);
notifyIcon1.ContextMenu = contextMenu;
notifyIcon1.Icon = Properties.Resources.ico;
notifyIcon1.Visible = true;
// WPF context menu
// The user cannot close the menu by clicking outside its bounds
// Does not detect any keyboard input
var notifyIcon2 = new System.Windows.Forms.NotifyIcon();
notifyIcon2.Icon = Properties.Resources.ico;
notifyIcon2.Visible = true;
notifyIcon2.Click += NotifyIcon2_Click;
}
private void NotifyIcon2_Click(object sender, EventArgs e)
{
var contextMenu = new ContextMenu();
var menuItem = new MenuItem();
menuItem.Header = "WPF Menu Item";
contextMenu.Items.Add(menuItem);
contextMenu.IsOpen = true;
}
}这种方法的问题是,WPF ContextMenu从来没有收到任何提示,表明用户已经离开菜单导航并应该关闭(例如,当用户单击菜单边界之外时)。任何焦点或MouseCapture事件都不会被触发,除了单击其中一项之外,我无法关闭菜单。
因此,这里的问题(稍微不同)是:如何使用WPF的ContextMenu正确地模拟NotifyIcon的ContextMenu关闭行为?
发布于 2022-05-23 14:50:22
我也面临着类似的问题。如果你想的话你可以试试
notifyIcon1.ContextMenuStrip = new Forms.ContextMenuStrip();
notifyIcon1.ContextMenuStrip.Items.Add("YourMenuItem",null, MenuItemEvent);我希望这样可以解决问题。
https://stackoverflow.com/questions/71133508
复制相似问题