自 Xamarin.Mac 1.12 以来,@TheNextman 发布的解决方案需要一些调整。BoundsDidChangeNotification 必须没有参数,否则将在 Main 中引发 System.AggregateException。如果您在选择器代码中不需要该参数,只需将其从方法签名中删除即可。但是,如果您需要,则必须使用其他版本的 AddObserver 方法
public override void AwakeFromNib()
{
tableView.EnclosingScrollView.ContentView.PostsBoundsChangedNotifications = true;
NSNotificationCenter.DefaultCenter.AddObserver(NSView.BoundsChangedNotification, BoundsDidChangeNotification, tableView.EnclosingScrollView.ContentView);
base.AwakeFromNib();
}
public void BoundsDidChangeNotification(NSNotification notification)
{
var view = notification.Object as NSView;
var position = view.Bounds.Location;
Console.WriteLine("Scroll position: " + position.ToString());
}
请注意,action 方法也可以使用 lambda 结构内联实现
更新与支持人员交谈后,似乎某些组件变得更加挑剔。您仍然可以将基于选择器的解决方案与参数一起使用,但您必须在选择器名称的末尾添加分号
[Export("boundsDidChangeNotification:")]
public void BoundsDidChangeNotification(NSObject o)