移动NSWindow的NSTrackingArea导致快速切换

时间:2018-02-08 22:18:15

标签: c# macos xamarin.forms xamarin.mac

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

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

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

我尝试过的事情

  • 切换NSWindow的IgnoresMouseEvents,但它导致的问题多于解决的问题。
  • 在调用每个侦听器后删除和添加MouseEnter和MouseLeave侦听器

我猜测大部分问题是调整大小是在一个允许调整大小累积的不同线程上完成的。

1 个答案:

答案 0 :(得分:0)

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