移动 NSWindow 中的 NSTrackingArea 会导致快速切换

NSTrackingArea in moving NSWindow causes rapid toggle

我正在为 MacOS 应用程序制作 Xamarin.Forms。我在主 NSWindow 中有一个 NSTrackingArea,它会在鼠标进入/退出时触发 window 调整大小。

public class MyWindow : NSWindow {
    public event EventHandler MouseEnter;
    public event EventHandler MouseLeave;

    public override void MouseEntered(NSEvent theEvent)
    {
        base.MouseEntered(theEvent);
        MouseEntered?.Invoke(this, EventArgs.Empty);
    }

    public override void MouseExited(NSEvent theEvent)
    {
        base.MouseExited(theEvent);
        MouseLeave?.Invoke(this, EventArgs.Empty);
    }
}

问题在于,用户可以快速将鼠标移出 window,导致一系列 window 调整大小,如果鼠标定位正确,则 window 将无限期地来回调整大小。

我试过的

我猜大多数问题是调整大小是在不同的线程上完成的,这允许调整大小累积。

我通过为 NSWindow class 扩展添加 CanToggle 属性 解决了这个问题。 MouseEnter 和 MouseLeave 检查这个标志;如果 CanToggle 为假,则不执行任何操作。 classes 之外可以在适当的时候设置 CanToggle 属性。