private static void ShowContentAdorner_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            var Element = o as FrameworkElement;

            if (Element == null)
            {
                return;
            }

            var Listener = GetContentAdornerDataContextWeakEventListener(Element);

            if ((bool)e.NewValue)
            {
                var AdornerLayer = InitializeAdornerLayerCache(Element);
                if (AdornerLayer == null)
                {
                    return;
                }

                var ContentAdorner = GetContentAdorner(Element);
                if (ContentAdorner == null)
                {
                    ContentAdorner       = new ContentAdorner(Element);
                    ContentAdorner.Style = GetContentAdornerStyle(Element);
                    SetContentAdorner(Element, ContentAdorner);
                }
                if (ContentAdorner.Parent != AdornerLayer)
                {
                    AdornerLayer.Add(ContentAdorner);
                }

                ContentAdorner.DataContext = Element.DataContext;
                if (Listener == null)
                {
                    Listener = new ContentAdornerDataContextWeakEventListener();
                }

                SetContentAdornerDataContextWeakEventListener(Element, Listener);
                DataContextChangedEventManager.AddListener(Element, Listener);
            }
            else
            {
                if (Listener != null)
                {
                    DataContextChangedEventManager.RemoveListener(Element, Listener);
                    SetContentAdornerDataContextWeakEventListener(Element, null);
                }
                RemoveContentAdorner(Element);
            }
        }
        private static void ShowContentAdorner_PropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            var Element = o as FrameworkElement;
            if (Element == null)
                return;

            var Listener = GetContentAdornerDataContextWeakEventListener(Element);

            if ((bool)e.NewValue)
            {
                var AdornerLayer = InitializeAdornerLayerCache(Element);
                if (AdornerLayer == null)
                    return;

                var ContentAdorner = GetContentAdorner(Element);
                if (ContentAdorner == null)
                {
                    ContentAdorner = new ContentAdorner(Element);
                    ContentAdorner.Style = GetContentAdornerStyle(Element);
                    SetContentAdorner(Element, ContentAdorner);
                }
                if (ContentAdorner.Parent != AdornerLayer)
                    AdornerLayer.Add(ContentAdorner);

                ContentAdorner.DataContext = Element.DataContext;
                if (Listener == null)
                    Listener = new ContentAdornerDataContextWeakEventListener();

                SetContentAdornerDataContextWeakEventListener(Element, Listener);
                DataContextChangedEventManager.AddListener(Element, Listener);
            }
            else
            {
                if (Listener != null)
                {
                    DataContextChangedEventManager.RemoveListener(Element, Listener);
                    SetContentAdornerDataContextWeakEventListener(Element, null);
                }
                RemoveContentAdorner(Element);
            }
        }