c# - 在 Xamarin Studio 中以编程方式创建 NSView

标签 c# macos cocoa mono xamarin

我正在尝试找到我之前提出的问题的解决方案:Populate SourceList in Xamarin.Mac app

我目前正在尝试实现 NSOutlineViewDelegateGetView 方法,看看是否可以在我拥有的 OutlineView 中创建一些文本。

但我一直在尝试向 NSView 对象添加内容。当我查看示例 OutlineView(将其拖到窗口时默认得到的)时,每个项目都有一个 TableCellView。结构如下所示(首先是标题,然后是常规项目):

Table Cell View
  Static Text - HEADER CELL
    Text Field Cell - HEADER CELL

Table Cell View
  Image View
    Image Cell
  Static Text - Table View Cell
    Text Field Cell - Table View Cell

到目前为止,我的方法如下所示:

public override NSView GetView (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
{
    var navigation = item as Navigation;
    var cell = new NSTableCellView();

    if (navigation.IsHeader) {
    } else {
    }

    return cell;
}

我首先猜测标题是什么,例如,我创建一个 NSTableHeaderCell 并将 StringValue 属性设置为 navigation.Name。但我不知道如何将其作为子项添加到我的 NSTableViewCell 中。

或者我的处理方式完全错误吗?我对 Mono 和 Xamarin 非常陌生(只使用过 WPF 和 XAML 完成过 C# 和 Visual Studio),并且以前从未在 Objective-C 中进行过编程(所以我花了一段时间才弄清楚方法/类的奇怪语法)。

最佳答案

您将在 XCode 中看到 Table Cell View 对象有一个可以设置的“标识符”。就我而言,我有“HeaderCell”和“DataCell”。

我的代码如下所示:

public override NSView GetView(NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
{
    if(IsGroupItem(outlineView, item))
    {
        return outlineView.MakeView("HeaderCell", this);
    }

    return outlineView.MakeView("DataCell", this);
}

这将创建 XCode 中定义的 TableCellView 的适当实例。

就我而言,我使用 Cocoa 绑定(bind)而不是数据源,因此我的 View 会自动填充数据。这可能是您想要研究的方法,因为它更接近 WPF/XAML 数据绑定(bind)方式。然而,它有一个陡峭的学习曲线并且很难调试(就像 WPF/XAML 数据绑定(bind)!)。

您可以访问它的 subview 并进行适当的设置,而不是简单地返回单元格。像这样的东西:

var dataView = outlineView.MakeView("DataCell", this);
((NSImageView)dataView.Subviews[0]).Image = // assign an image
((NSTextField)dataView.Subviews[1]).StringValue = // assign your text
return dataView;

(注意:我只是从头顶输入,它可能无法按原样工作 - 但希望您明白)

关于c# - 在 Xamarin Studio 中以编程方式创建 NSView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17544025/

相关文章:

objective-c - 检查 Objective C 中的资源分支

macos - 外壳错误 "-bash: bad substitution: no closing ` )'"

c# - Datagridview 到特定的 excel 单元格

c# - 在 MVC 中,管理业务异常或错误的最佳方法是什么?

C#/Web开发学习攻略

linux - 使用路径分隔符将目录树中的所有文件连接成单个文件

cocoa - 核心数据遍历具有 NSArrayController 内容集的实体?

cocoa - 在 cocoa 中显示图像

cocoa - 当鼠标悬停在特定 NSMenuItem 上时收到通知

c# - 试图了解如何创建流畅的界面,以及何时使用它们