Я пытаюсь программно добавить событие MouseEntered в настраиваемый класс NSButton, и мне не удается заставить его сработать. Я пишу приложение ОС Ma c в Visual Studio для Ma c, используя Xamarin.Ma c. Мне нужно добавить событие в код, потому что я создаю кнопки динамически.
Вот мой 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);
}
}
}
}
А вот и настраиваемый класс кнопок.
public class HexButton : NSButton
{
public NSTrackingArea _trackingArea;
public HexButton(int x, int y, double height)
{
double width = height/Math.Sqrt(3);
double doubleWidth = width * 2;
double halfHeight = height/2;
double columnNudge = decimal.Remainder(x, 2) == 0 ? 0 : halfHeight;
Title = x + "," + y;
//Bordered = false;
//ShowsBorderOnlyWhileMouseInside = true;
SetFrameSize(new CGSize(width, height));
SetFrameOrigin(new CGPoint(width + (x * doubleWidth), (y * height) + columnNudge));
_trackingArea = new NSTrackingArea(Frame, NSTrackingAreaOptions.ActiveInKeyWindow | NSTrackingAreaOptions.MouseEnteredAndExited, this, null);
AddTrackingArea(_trackingArea);
}
public override void MouseEntered(NSEvent theEvent)
{
base.MouseEntered(theEvent);
Console.WriteLine("mouse enter");
}
}
Итак, как видите, я создаю область отслеживания для кнопки и добавив ее в конструктор. Тем не менее, я не могу заставить MouseEntered стрелять. Я знаю, что переопределение MouseEntered в этом классе работает, потому что, когда я вызываю button.MouseEntered () непосредственно из моего кода, метод срабатывает.
Я пробовал еще несколько вещей: Action и Target в ViewController, если они каким-то образом переопределяли обработчик MouseEntered. Установка этих значений внутри конструктора HexButton так, чтобы Target была кнопкой, а не ViewController. Помещение переопределения MouseEntered в ViewController вместо класса кнопки. Создание области отслеживания после того, как кнопка была добавлена в качестве подпредставления к ViewController. Ничего из этого не имело значения.
Любая помощь будет принята с благодарностью! Документацию для Xamarin.Ma найти довольно сложно c ...
Спасибо!