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

C# 移动NSWindow中的NSTrackingArea导致快速切换,c#,macos,xamarin.forms,xamarin.mac,C#,Macos,Xamarin.forms,Xamarin.mac,我正在制作一个Xamarin.Forms for MacOS应用程序。我在主NSWindow中有一个NSTrackingArea,当鼠标进入/退出时,它会触发窗口调整大小 public class MyWindow : NSWindow { public event EventHandler MouseEnter; public event EventHandler MouseLeave; public override void MouseEntered(NSEven

我正在制作一个Xamarin.Forms for MacOS应用程序。我在主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侦听器后删除和添加它们

我猜大部分的问题是,调整大小是在不同的线程上完成的,这使得调整大小可以累积

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

如何调整窗口的大小?可能会添加一个“IsResising”机制。有一种关系允许Xamarin.Forms类调用MyWindow SetFrame(不是直接调用,而是本质上调用)。我用你的建议解决了这个问题,这是一个非常简单的解决方案。谢谢