private static void OnVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { FrameworkElement adornedElement = d as FrameworkElement; if (adornedElement == null) { throw new InvalidOperationException("Adorners can only be applied to elements deriving from FrameworkElement"); } AdornerLayer layer = AdornerLayer.GetAdornerLayer(adornedElement); if (layer == null) { throw new InvalidOperationException("Cannot show adorner since no adorner layer was found in the visual tree"); } SmartAdorner adorner = GetAdorner(adornedElement); bool isVisible = (bool)e.NewValue; if (isVisible && adorner == null) { adorner = new SmartAdorner(adornedElement); SetAdorner(adornedElement, adorner); layer.Add(adorner); } else if (!isVisible && adorner != null) { layer.Remove(adorner); SetAdorner(d, null); } }
private static void OnTemplateSelectorChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { SmartAdorner adorner = GetAdorner(d); if (adorner != null) { adorner.TemplateSelector = (DataTemplateSelector)e.NewValue; } }
private static void SetAdorner(DependencyObject obj, SmartAdorner value) { obj.SetValue(AdornerProperty, value); }