由于它是一个 C API,您可以简单地使用 P/Invoke 来绑定它。
关于复杂类型:
NSRect
变为RectangleF
- 请参阅NSGraphics.RectClip
monomac /src/AppKit/NSGraphics.cs中的示例。
NSImage *
变成IntPtr
- 使用构造函数IntPtr
来构造它的Handle
属性来获取地址。
GCFloat
简直就是一个float
。
BOOL
是bool
(参见NSGraphics.BestDepth
示例)。
- 用于枚举
int
。NSCompositingOperation
因此,将各个部分放在一起,应该这样做:
[DllImport (Constants.AppKitLibrary)]
extern static void NSDrawThreePartImage (RectangleF rect, IntPtr startCap, IntPtr centerFill, IntPtr endCap, bool vertial, int op, float alphaFraction, bool flipped);
public void DrawThreePartImage (RectangleF frame, NSImage startCap, NSImage centerFill, NSImage endCap, bool vertical, NSCompositingOperation op, float alphaFraction, bool flipped)
{
// Or throw ArgumentNullException if NULL is not allowed here
var startCapPtr = startCap != null ? startCap.Handle : IntPtr.Zero;
var centerFillPtr = centerFill != null ? centerFill.Handle : IntPtr.Zero;
var endCapPtr = endCap != null ? endCap.Handle : IntPtr.Zero;
NSDrawThreePartImage (frame, startCapPtr, centerFillPtr, endCapPtr, vertical, (int)op, alphaFraction, flipped);
}
NSDrawNinePartImage
应该以类似的方式工作。
不知道为什么它被注释掉了,很可能它只是从未得到实施。还有更多缺失的部分。让我知道它是否适合您,我会为您将它添加到 NSCell.cs 中。
编辑:
我刚刚将此添加到 NSCell.cs:https ://github.com/mono/monomac/commit/7c60d5756c49331642d2348c7c83320b9ec3f549 。非常感谢您对此进行测试!