protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;

            if (disposing)
            {
                SetElement(_element, null);

                if (_renderer != null)
                {
                    _renderer.ElementChanged -= RendererOnElementChanged;

                    if (_renderer.View.IsAlive() && _attachTracker.IsAlive())
                    {
                        _renderer.View.RemoveOnAttachStateChangeListener(_attachTracker);
                        _attachTracker = null;
                    }

                    _renderer = null;
                    _context  = null;
                }
            }
        }
        public VisualElementTracker(IVisualElementRenderer renderer)
        {
            _batchCommittedHandler  = HandleRedrawNeeded;
            _propertyChangedHandler = HandlePropertyChanged;

            _renderer = renderer ?? throw new ArgumentNullException(nameof(renderer));
            _context  = renderer.View.Context;
            _renderer.ElementChanged += RendererOnElementChanged;

            VisualElement view = renderer.Element;

            SetElement(null, view);

            renderer.View.SetCameraDistance(3600);

            if (!_context.IsDesignerContext())
            {
                _attachTracker = AttachTracker.Instance;
                renderer.View.AddOnAttachStateChangeListener(_attachTracker);
            }
            else
            {
                _attachTracker = new AttachTracker();
            }
        }