如何在各种形状的NSCollectionView中显示元素

时间:2018-01-26 19:42:48

标签: macos cocoa xamarin nscollectionview

我是新秀可可人。我需要设计和实现一个视图,该视图将使用Xamarin在Mac OS上显示标签集合。这些标签将具有与其相关联的文本和颜色。当在视图内部显示时,标签应该展开直到它覆盖整个文本,它将以背景和前景色显示。

我在Windows上附加了此用户控件的图片,您可以看到StackPanel内的标签正在扩展,直到它们覆盖整个文本。希望这能更好地了解我的问题。

enter image description here

1 个答案:

答案 0 :(得分:0)

64,000美元的问题是"这些标签控件是什么?"换句话说,您是否希望用户点击这些来做某事,或者他们只是为了展示?

如果你的答案是"只是为了显示",解决方案非常简单:使用NSTextField并以编程方式向其添加属性文本(NSAttributedString)。归因文本将显示属性附加到字段内的文本运行;属于"背景颜色"。

如果你想让它们成为你可以点击的按钮,那么事情会变得复杂得多。

由于您显然希望按钮布局为" flow",您可以使用附件查看嵌入按钮(以及按钮单元格)到NSTextField。这通常是如何插入非文本内容(例如,图像),但是通过一些摆弄它实际上可以是控制单元可以绘制的任何内容。请参阅How to insert a NSButton into a NSTextView? (inline)

警告:这不是"新秀"主题,将涉及控制单元和自定义事件处理。

如果这样做,我可能只为每个标签创建NSButton个对象(选择合适的样式/外观像NSRecessedBezelStyle),创建一个NSView的自定义子类包含它们,然后覆盖layout方法以按我想要的方式定位所有按钮。

为了彻底,我还会覆盖内在大小的方法,这样整个事物就可以根据它所包含的按钮的数量和大小参与自动布局。