xamarin - 我可以向 Xamarin.Mac 中的 NSPopUpButton 项目添加额外信息吗?
问题描述
我正在使用 Xamarin.Mac 在 C# 中构建一个 Mac OS 应用程序。我想用存储更多信息的项目来填充下拉列表(NSPopUpButton),而不仅仅是它们的标题和索引。具体来说,我希望每个项目也拥有自己的数据库 ID,因此当用户从下拉列表中选择该项目时,我可以轻松地从数据库中获取相关记录。
我看到 NSPopUpButton 使用 NSMenuItem 的实例,并且继承 NSMenuItem 很容易,但似乎没有直接插入实例的方法。AddItem() 方法只接受一个字符串(项目的标题)并且没有重载。有没有办法使用自定义项目,或者我只是坚持使用标题和索引来区分?
谢谢!
解决方案
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);
推荐阅读
- c# - 基于另一个字符串数组从字符串数组中删除重复项
- c - C 中 fgets() 的问题
- c++ - std::cout 不输出任何内容
- javascript - 如何测试对象内的href?
- r - 预测具有多个单独组的线性回归
- java - 无法使用访问令牌从 OKTA 获取用户信息
- python - Apache/Flask/mod_wsgi:提高在 apache 服务器上运行的烧瓶应用程序的请求速度
- shell - 需要帮助来了解在 Raspberry Pi 上设置 gpio 引脚的 shell 脚本
- azure - Azure VM 在计划时间之前备份或时间不正确
- javascript - 如何在同一个元素上进行多次点击事件?