c# - NSStatusBarButton.Activate 事件不会触发 (Xamarin.Mac - C#)
问题描述
我正在尝试订阅'sActivate
中的NSStatusBarButton
对象的事件,但该事件永远不会被调用。AppDelegate
DidFinishLaunching()
目的是在单击应用程序的顶部菜单栏图标时收到通知,以便动态填充其内容。
using AppKit;
using Foundation;
[Register("AppDelegate")]
public class AppDelegate : NSApplicationDelegate
{
private NSStatusItem _statusBar;
public override void DidFinishLaunching(NSNotification notification)
{
this._statusBar = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
this._statusBar.Title = "MyApp";
this._statusBar.HighlightMode = true;
this._statusBar.Menu = new NSMenu("MyApp");
// Working example on NSMenuItem object
var someItem = new NSMenuItem("Some Item");
someItem.Activated += (sender, e) =>
{
System.Diagnostics.Debug.WriteLine("This one does fire.");
};
this._statusBar.Menu.AddItem(someItem);
// Problem
this._statusBar.Button.Activated += (sender, e) =>
{
System.Diagnostics.Debug.WriteLine("This one does not fire.");
};
}
}
解决方案
它不会触发,因为您附加了菜单。按钮动作是弹出菜单,并且按钮的激活事件永远不会被触发。如果您删除菜单,按钮事件将运行。
删除菜单并将其用作按钮。然后您的事件将触发。或者只是使用菜单。
如果要在显示菜单时运行自定义代码,请设置 NSMenu 的委托:
using AppKit;
using Foundation;
public class MyMenuDelegate : NSObject, INSMenuDelegate
{
public void MenuWillHighlightItem(NSMenu menu, NSMenuItem item)
{
}
[Export("menuWillOpen:")]
public void MenuWillOpen(NSMenu menu)
{
// your code here
}
}
[Register("AppDelegate")]
public class AppDelegate : NSApplicationDelegate
{
private NSStatusItem _statusBar;
MyMenuDelegate _menuDel;
public override void DidFinishLaunching(NSNotification notification)
{
_statusBar = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
_statusBar.Title = "MyApp";
_statusBar.HighlightMode = true;
_statusBar.Menu = new NSMenu("MyApp");
_menuDel = new MyMenuDelegate();
_statusBar.Menu.Delegate = _menuDel;
// Working example on NSMenuItem object
var someItem = new NSMenuItem("Some Item");
someItem.Activated += (sender, e) =>
{
System.Diagnostics.Debug.WriteLine("This one does fire.");
};
_statusBar.Menu.AddItem(someItem);
}
}
推荐阅读
- css - 选择不是具有特定属性属性的元素的子元素
- ruby-on-rails - 如何从模型访问 config/application.rb 中的自定义变量?
- arrays - ArraySort 回调未按正确顺序对我的数组进行排序
- r - 如何使用 plot3D::persp3D() 像使用 rgl::persp3d() 一样在 rgl 设备中查看绘图?
- html - 我的日期字段在 IE8 中运行良好,但在 IE11 中运行不正常
- bash - 不能在 mv 命令中使用此变量
- c# - 实体框架上下文 SqlQuery
对于存储过程返回 SqlParameter 已被另一个 SqlParameterCollection 包含 - c - 在c中使用信号量同步两个子进程
- angular - 如果一个 observable 正在进行,订阅它,如果没有,重新启动它
- javascript - 这些出口在功能上是否相同?