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

问题描述 投票:1回答:1

我正在尝试解决我先前提出的问题:Populate SourceList in Xamarin.Mac app

我目前正在尝试实现GetViewNSOutlineViewDelegate方法,以查看是否可能在我拥有的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个回答
2
投票
您会在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;

((注:我只是从脑海中键入,它可能无法按原样运行-但希望您能理解)
© www.soinside.com 2019 - 2024. All rights reserved.