【问题标题】:Can I add extra information to NSPopUpButton items in Xamarin.Mac?我可以向 Xamarin.Mac 中的 NSPopUpButton 项目添加额外信息吗?
【发布时间】:2020-12-18 15:02:26
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • 对它进行子类化并添加一个属性来保存您的额外信息有什么问题?
  • 我不知道如何将该子类的实例添加到 NSPopUpButton 的项目中。我看到的唯一 AddItem 方法只需要一个字符串(对于 Title 属性),它创建的项目是一个标准的 NSMenuItem。
  • 你需要使用NSPopUpButton.Menu属性,看我的回答。

标签: xamarin xamarin.mac nspopupbutton


【解决方案1】:

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

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);

【讨论】:

  • 这就是我所需要的!谢谢!
猜你喜欢
  • 2015-03-08
  • 2017-05-26
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多