c # в Mac OSX 10.15.6 UpdateLayer() линия штриха не отображается в NScustomview

#c# #macos #line #nsview #custom-view

#c# #macos #строка #nsview #пользовательский вид

Вопрос:

Я новичок в программировании MAC, специфичном для OSX на C #; Я хотел бы иметь возможность обновлять customview для динамического рисования линий (т. Е. биржевых графиков), используя массив из ViewController.cs при наведении курсора мыши, я вообще не совсем там.

Во-первых, я пытаюсь выяснить, почему вообще ничего не отображается с помощью метода UpdateLayer (), когда я пытаюсь провести линию. Если бы я использовал ту же линию штриха в drawrect, это было бы слово только один раз, и я не могу передать какой-либо параметр из ViewController.cs, я также пытаюсь выяснить, как обновить customview, поэтому drawrect вызывается только один раз. Хотя мне нужно использовать UpdateLayer () вместо этого, если я хочу обновить представление, но из UpdateLayer ничего не отображается, обводка линии не работает.

Я долго искал в Интернете наглядный пример на C # cocoa, большинство примеров, которые я смог найти, находятся на других языках, таких как Swift, которые они используют setneedsdisplay по щелчку мыши, чтобы обновить customview, я не смог найти эквивалент в C #.

 using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using AppKit;
using CoreGraphics;

namespace Mac13_UpdLayer
{
    public partial class CustView : AppKit.NSView
    {
        #region Constructors

        // Called when created from unmanaged code
        public CustView(IntPtr handle) : base(handle)
        {
            Initialize();
        }

        // Called when created directly from a XIB file
        [Export("initWithCoder:")]
        public CustView(NSCoder coder) : base(coder)
        {
            Initialize();

        }

        // Shared initialization code
        void Initialize()
        {
            this.WantsLayer = true;
            this.LayerContentsRedrawPolicy = NSViewLayerContentsRedrawPolicy.OnSetNeedsDisplay;

        }

        public override void DrawRect(CGRect dirtyRect)
        {

               base.DrawRect(dirtyRect);

        }

        public override bool WantsUpdateLayer
        {
            get
            {
                return true;
            }
        }
        
        public override void UpdateLayer()
        {


            base.UpdateLayer();
            NSColor.LabelColor.Set();
            NSColor.Magenta.Set();
            NSBezierPath path = new NSBezierPath();
            path.LineWidth = 3;
            CGPoint c001 = new CGPoint(0, 0);
            CGPoint c003 = new CGPoint(this.AccessibilityFrame.Width, this.AccessibilityFrame.Height);
            path.MoveTo(c001);
            path.LineTo(c003);
            path.Stroke();


        }
        #endregion
    }
}

using System;

using AppKit;
using Foundation;

namespace Mac13_UpdLayer
{
    public partial class ViewController : NSViewController
    {
        public ViewController(IntPtr handle) : base(handle)
        {
        }

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Do any additional setup after loading the view.


       

            //   this.View.Layer.BackgroundColor = NSColor.DarkGray.CGColor;
        }

        public override NSObject RepresentedObject
        {
            get
            {
                return base.RepresentedObject;
            }
            set
            {
                base.RepresentedObject = value;
                // Update the view, if already loaded.
   
            }
        }

        partial void ButRefAction(Foundation.NSObject sender)
        {
            //declare array
            //refresh customview from array
        }
    }
}