protected virtual void UnsubscribeFromEvents(ToolKitMediaElement element)
        {
            if (element == null)
            {
                return;
            }

            element.PropertyChanged   -= OnElementPropertyChanged;
            element.SeekRequested     -= SeekRequested;
            element.StateRequested    -= StateRequested;
            element.PositionRequested -= OnPositionRequested;
        }
        void IVisualElementRenderer.SetElement(VisualElement element)
        {
            if (element == null)
            {
                throw new ArgumentNullException(nameof(element));
            }

            if (!(element is ToolKitMediaElement))
            {
                throw new ArgumentException($"{nameof(element)} must be of type {nameof(MediaElement)}");
            }

            var oldElement = MediaElement;

            MediaElement = (ToolKitMediaElement)element;

            if (oldElement != null)
            {
                UnsubscribeFromEvents(oldElement);
            }

            var currentColor = oldElement?.BackgroundColor ?? Color.Default;

            if (element.BackgroundColor != currentColor)
            {
                UpdateBackgroundColor();
            }

            if (MediaElement != null)
            {
                MediaElement.PropertyChanged   += OnElementPropertyChanged;
                MediaElement.SeekRequested     += SeekRequested;
                MediaElement.StateRequested    += StateRequested;
                MediaElement.PositionRequested += OnPositionRequested;
            }

            // Can't set up the tracker in the constructor because it access the Element (for now)
            if (tracker == null)
            {
                SetTracker(new VisualElementTracker(this));
            }

            OnElementChanged(new ElementChangedEventArgs <MediaElement>(oldElement, MediaElement));
        }