如何在 xamarin.mac 中绘制矩形

How to draw a rectangle in xamarin.mac

我正在尝试在 xamarin.mac 框架中绘制一个矩形。这似乎可以通过 CoreGrpahics 命名空间来完成,但我不确定它是如何与 xamarin 挂钩的。例如

        NSColor.Black.Set();
        NSBezierPath.StrokeLine(new CGPoint(-10.0f, 0.0f), new CGPoint(10.0f, 0.0f));

没有在屏幕上显示任何内容,而我认为它应该显示一行。这在另一个 Xamarin 中似乎微不足道。框架,因为有可用的内置函数,但 xamarin.mac 文档非常稀少。

这段代码来自 Xamarin docs 画了一个三角形,但应该给你基本的想法。 iOS 和 Mac 的 CoreGraphics API 应该是相同的,因此一个示例应该很容易转换为另一个

//get graphics context
using (CGContext g = UIGraphics.GetCurrentContext ()) {

    //set up drawing attributes
    g.SetLineWidth (10);
    UIColor.Blue.SetFill ();
    UIColor.Red.SetStroke ();

    //create geometry
    var path = new CGPath ();

    path.AddLines (new CGPoint[]{
    new CGPoint (100, 200),
    new CGPoint (160, 100), 
    new CGPoint (220, 200)});

    path.CloseSubpath ();

    //add geometry to graphics context and draw it
    g.AddPath (path);       
    g.DrawPath (CGPathDrawingMode.FillStroke);
}

欢迎光临!很高兴看到更多 Xamarin.Mac 用户。

@SushiHangover 暗示了它,但你需要处于有效的绘制上下文中。请原谅我是否过度解释,但像您正在讨论的自定义绘图通常是在 NSView 中完成的,通常是通过覆盖视图的 DrawRect(CGRect dirtyRect) 方法。该方法由 AppKit 在适当的图形上下文中固有地调用。因此,如果在视图的该方法中调用,您的代码将正常工作。请记住,这些绘图方法会被经常调用,并且必须高效。

如果您要使用 CGPath 而不是 NSBezierPath,则需要通过调用 NSGraphicsContext.CurrentContext.CGContext.addPath(path) 将该路径添加到上下文中。

我在这里为您制作了一个名为 "MacOS Custom Drawing" 的小 Xamarin 工作簿,它显示了两种方式:https://github.com/NickSpag/Workbooks。我还推荐用于绘图练习和测试的工作簿,因为它们可以非常轻松地持续快速地重新加载您的代码。