Я делаю приложение Xamarin.Forms для MacOS. У меня есть NSTrackingArea в основном NSWindow, который вызывает изменение размера окна при входе/выходе мыши.
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);
}
}
Проблема в том, что пользователь может быстро перемещать мышь по окну и за его пределы, вызывая цепочку изменений размеров окна, и если мышь расположена правильно, размер окна будет изменяться вперед и назад бесконечно.
Что я пробовал
- Переключение IgnoresMouseEvents NSWindow, но это вызывает больше проблем, чем решает.
- Удаление и добавление прослушивателей MouseEnter и MouseLeave после вызова каждого из них
Я предполагаю, что большая часть проблемы заключается в том, что изменение размера выполняется в другом потоке, что позволяет накапливать изменения размеров.