Как изменить тип курсора на nsbox и nsimage - PullRequest
0 голосов
/ 04 октября 2018

Я использую xamarin.mac, чтобы сделать приложение какао.У меня есть поле на контроллере представления, я хочу, чтобы при наведении мыши на это поле оно переходило в руки, как в nsbutton.

1 Ответ

0 голосов
/ 04 октября 2018

1st: NSView Subclass

Создайте подкласс NSView и определите, что вам произойдет в переопределениях MouseEntered / MouseExited.В этом случае нажатие и извлечение NSCursor.ClosedHandCursor из стека курсоров.

public partial class MyCustomImageView : NSImageView
{
    [Export("initWithCoder:")]
    public MyCustomImageView(NSCoder coder) : base(coder) { }
    public MyCustomImageView (IntPtr handle) : base (handle) { }

    NSCursor cursor;

    [Export("mouseEntered:")]
    public override void MouseEntered(NSEvent theEvent)
    {
        cursor = NSCursor.ClosedHandCursor;
        cursor.Push();
        base.MouseEntered(theEvent);
    }

    [Export("mouseExisted:")]
    public override void MouseExited(NSEvent theEvent)
    {
        base.MouseExited(theEvent);
        cursor?.Pop();
    }

}

2nd: NSTrackingArea

Теперь вы можете определить NSTrackingArea, который будет активировать обработчики, введенные и выведенные мышью,Предполагая, что MyImageView является экземпляром / выходом вашего подкласса NSView, а затем добавьте эту область отслеживания в представление (AddTrackingArea()).

var ta = new NSTrackingArea(MyImageView.Bounds, NSTrackingAreaOptions.ActiveAlways | NSTrackingAreaOptions.MouseEnteredAndExited, MyImageView, null);
MyImageView.AddTrackingArea(ta);
...