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); } }
internal static void SetContentAdorner(FrameworkElement element, ContentAdorner value) { element.SetValue(ContentAdornerProperty, value); }