【问题标题】:Create NSView programmatically in Xamarin Studio在 Xamarin Studio 中以编程方式创建 NSView
【发布时间】:2013-07-06 19:28:55
【问题描述】:

我正在尝试解决我之前提出的这个问题: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 中进行过编程(所以我花了一段时间才弄清楚方法/类的奇怪语法)。

【问题讨论】:

    标签: c# macos cocoa mono xamarin


    【解决方案1】:

    您将在 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 绑定而不是数据源,因此我的视图会自动填充数据。这可能是您想要研究的一种方法,因为它更接近于 WPF/XAML 的数据绑定方式。但是,它的学习曲线陡峭且难以调试(如 WPF/XAML 数据绑定!)。

    您可以访问它的子视图并适当地设置它们,而不是简单地返回单元格。比如:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多