private void RemoveFromParent()
        {
            var cctl = _parent as IContentControl;

            if (cctl != null && cctl.Content != this)
            {
                cctl.Content = null;
            }
            else
            {
                var pctl = _parent as IChildrenControl;
                if (pctl != null)
                {
                    pctl.Children.Remove(this);
                }
                else
                {
                    throw new Exception("Unknown IParentControl");
                }
            }
            try
            {
                DetachedFromParent?.Invoke(this, EventArgs.Empty);
            }
            catch
            {
                /* */
            }
        }
        private void OnDetach(object sender, ChildRemovedEventArgs args)
        {
            var ctrl = args?.Child;

            if (sender != _parent || ctrl != this)
            {
                return;
            }
            var cctl = sender as IContentControl;

            if (cctl != null && cctl.Content != this)
            {
                cctl.ContentDetached -= OnDetach;
            }
            else
            {
                var pctl = sender as IChildrenControl;
                if (pctl != null)
                {
                    pctl.ChildRemoved -= OnDetach;
                }
                else
                {
                    throw new Exception("Unknown IParentControl");
                }
            }
            try
            {
                DetachedFromParent?.Invoke(this, EventArgs.Empty);
            }
            catch
            {
                /* */
            }
        }