首页 > 解决方案 > 我可以向 Xamarin.Mac 中的 NSPopUpButton 项目添加额外信息吗?

问题描述

我正在使用 Xamarin.Mac 在 C# 中构建一个 Mac OS 应用程序。我想用存储更多信息的项目来填充下拉列表(NSPopUpButton),而不仅仅是它们的标题和索引。具体来说,我希望每个项目也拥有自己的数据库 ID,因此当用户从下拉列表中选择该项目时,我可以轻松地从数据库中获取相关记录。

我看到 NSPopUpButton 使用 NSMenuItem 的实例,并且继承 NSMenuItem 很容易,但似乎没有直接插入实例的方法。AddItem() 方法只接受一个字符串(项目的标题)并且没有重载。有没有办法使用自定义项目,或者我只是坚持使用标题和索引来区分?

谢谢!

标签: xamarinxamarin.macnspopupbutton

解决方案


NSMenuItem通过该NSPopUpButton.Menu.AddItem方法添加您的子类。

示例 NSMenuItem:

public class MyNSMenuItem : NSMenuItem
{
    public string SomeCustomProperty { get; set; }
    
    ~~~~
    // add all the .ctors w/ base calls....
}

示例用法:

var popUpButton = new NSPopUpButton()
{
    Frame = new CGRect(100, 100, 100, 100),
    Title = "A pop button",
};
var menuItem = new MyNSMenuItem()
{
    Title = "StackOverflow",
    SomeCustomProperty = "SomeInstance",
};
menuItem.Activated += (sender, e) =>
{
    Console.WriteLine((sender as MyNSMenuItem).SomeCustomProperty);
};
popUpButton.Menu.AddItem(menuItem);
this.View.AddSubview(popUpButton);

推荐阅读