Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在Xamarin.Mac中的NSButton上安装了t触发器鼠标_Xamarin_Cocoa_Xamarin.mac - Fatal编程技术网

Can';在Xamarin.Mac中的NSButton上安装了t触发器鼠标

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

我试图以编程方式将MouseEntered事件添加到自定义NSButton类中,但似乎无法启动它。我正在Visual Studio for Mac中使用Xamarin.Mac编写一个Mac OS应用程序。我需要在代码中添加事件,因为我正在动态创建按钮

这是创建这些按钮的ViewController。它们在底部附近的DrawHexMap方法中实例化

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);