Can';在Xamarin.Mac中的NSButton上安装了t触发器鼠标
我试图以编程方式将MouseEntered事件添加到自定义NSButton类中,但似乎无法启动它。我正在Visual Studio for Mac中使用Xamarin.Mac编写一个Mac OS应用程序。我需要在代码中添加事件,因为我正在动态创建按钮 这是创建这些按钮的ViewController。它们在底部附近的DrawHexMap方法中实例化Can';在Xamarin.Mac中的NSButton上安装了t触发器鼠标,xamarin,cocoa,xamarin.mac,Xamarin,Cocoa,Xamarin.mac,我试图以编程方式将MouseEntered事件添加到自定义NSButton类中,但似乎无法启动它。我正在Visual Studio for Mac中使用Xamarin.Mac编写一个Mac OS应用程序。我需要在代码中添加事件,因为我正在动态创建按钮 这是创建这些按钮的ViewController。它们在底部附近的DrawHexMap方法中实例化 public partial class MapController : NSViewController { public MapContr
public partial class MapController : NSViewController
{
public MapController (IntPtr handle) : base (handle)
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
DrawHexMap();
}
partial void GoToHex(Foundation.NSObject sender)
{
string[] coordinateStrings = ((NSButton)sender).Title.Split(',');
Hex chosenHex = HexRepo.GetHex(coordinateStrings[0], coordinateStrings[1]);
HexService.currentHex = chosenHex;
NSTabViewController tp = (NSTabViewController)ParentViewController;
tp.TabView.SelectAt(1);
}
private void DrawHexMap()
{
double height = 60;
for (int x = 0; x < 17; x++) {
for (int y = 0; y < 13; y++) {
HexButton button = new HexButton(x, y, height);
var handle = ObjCRuntime.Selector.GetHandle("GoToHex:");
button.Action = ObjCRuntime.Selector.FromHandle(handle);
button.Target = this;
View.AddSubview(button);
}
}
}
}
如您所见,我正在为按钮创建一个跟踪区域,并将其添加到构造函数中。然而,我似乎无法让一只老鼠开火。我知道这个类中的MouseEntered重写是有效的,因为当我直接从代码中调用button.MouseEntered()时,该方法就会触发
我尝试过的其他一些事情包括:注释掉在ViewController中设置动作和目标的行,以防它们以某种方式覆盖鼠标插入的处理程序。在HexButton构造函数中设置这些值,以便目标是按钮而不是ViewController。将鼠标覆盖放置在ViewController中而不是button类中。在按钮作为子视图添加到ViewController后创建跟踪区域。所有这些都没有什么不同
任何帮助都将不胜感激!很难找到Xamarin.Mac的文档
谢谢 您将添加
帧
作为跟踪的区域,但是您将跟踪区域附加到创建区域的视图,因此您需要跟踪边界
坐标
_trackingArea = new NSTrackingArea(Bounds, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited, this, null);
注意:如果从要添加按钮的视图进行跟踪,则需要跟踪“帧”,因为跟踪区域相对于要跟踪的视图,而不是其子视图 @寿司宿醉我没有,但我只是添加了它,不幸的是,它没有什么区别。@NatWebb很高兴它起到了作用
_trackingArea = new NSTrackingArea(Bounds, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited, this, null);