[英]Create NSView programmatically in Xamarin Studio
我试图找到我之前问过的这个问题的解决方案: 在 Xamarin.Mac 应用程序中填充 SourceList
我目前正在尝试实现NSOutlineViewDelegate
的GetView
方法,以查看是否可能在我拥有的 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 绑定而不是数据源,因此我的视图会自动填充数据。 这可能是您想要研究的一种方法,因为它更接近 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;
(注意:我只是从头顶输入,它可能无法按原样工作 - 但希望你能明白)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.