Прежде всего, моя цель - создать прагматически (без контроллеров или таких вещей, только один класс) без рамки NSWindow. В этом окне я хотел бы отслеживать события мыши, например: «Мышь вниз», движение мыши. Так просто.Как захватить события мыши в C# MonoMac
Мне нужно сделать это на C#, используя Xamarin Studio в проекте Monomac. Мое окно супер-простой
public class MyWindow : NSWindow
{
public MyWindow()
:base(new RectangleF (0, 0, 100, 100),
NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled, NSBackingStore.Buffered,
false)
{
this.StyleMask = NSWindowStyle.Borderless;
this.MakeKeyAndOrderFront(null);
}
}
Теперь, насколько я знаю, что я должен добавить NSView к этому NSWindow классу с заявленными событиями. Так что я создал NSView класс:
public class MouseTracking : NSView
{
public NSTrackingArea tracking;
public override bool AcceptsFirstResponder()
{
return true;
}
public override void DrawRect(RectangleF dirtyRect)
{
base.DrawRect(dirtyRect);
var context = NSGraphicsContext.CurrentContext.GraphicsPort;
var rectangle = new RectangleF (0,0, this.Frame.Width, this.Frame.Height);
NSColor.Blue.Set();
context.FillRect (rectangle);
}
public override void UpdateTrackingAreas()
{
if (tracking != null)
{
this.RemoveTrackingArea(tracking);
tracking.Release();
}
tracking = new NSTrackingArea(this.Frame,NSTrackingAreaOptions.MouseEnteredAndExited | NSTrackingAreaOptions.ActiveAlways ,this, null);
this.AddTrackingArea(tracking);
}
public override void MouseMoved(NSEvent theEvent)
{
Console.WriteLine("MouseMoved");
}
public override void MouseExited(NSEvent theEvent)
{
Console.WriteLine("MouseExitedTest");
}
}
Мой вопрос заключается в том, чтобы добавить MouseTracking NSView в MyWindow и сделать эти события мыши доступны? Я пытался в MyWindow конструктору сделать:
MouseTracking tracking = new MouseTracking();
this.ContentView.AddSubview (tracking);
, но это не работает .. Я просто хочу, чтобы это сделать (две строки в WinForms):
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown);
private void panel1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { }
Спасибо, за помощь