如何在nsbox和nsimage上更改光标类型

时间:2018-10-04 07:58:53

标签: c# xamarin xamarin.mac

我正在使用xamarin.mac制作可可应用程序。我在视图控制器上有盒子, 我希望每当鼠标移到该框上时,它都会像nsbutton一样移到手中。

1 个答案:

答案 0 :(得分:1)

第一个:NSView子类

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