private static void OnTargetPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DescriptionViewer dv = d as DescriptionViewer; if (dv != null) { bool targetFocused = e.NewValue == FocusManager.GetFocusedElement(); if (dv.IsFocused != targetFocused) { dv.IsFocused = targetFocused; } dv.LoadMetadata(false); FrameworkElement oldElement = e.OldValue as FrameworkElement; FrameworkElement newElement = e.NewValue as FrameworkElement; EventHandler <ValidationErrorEventArgs> bindingHandler = new EventHandler <ValidationErrorEventArgs>(dv.Target_BindingValidationError); RoutedEventHandler gotFocusHandler = new RoutedEventHandler(dv.Target_GotFocus); RoutedEventHandler lostFocusHandler = new RoutedEventHandler(dv.Target_LostFocus); if (oldElement != null) { oldElement.BindingValidationError -= bindingHandler; oldElement.GotFocus -= gotFocusHandler; oldElement.LostFocus -= lostFocusHandler; } if (newElement != null) { newElement.BindingValidationError += bindingHandler; newElement.GotFocus += gotFocusHandler; newElement.LostFocus += lostFocusHandler; } dv.ParseTargetValidState(); } }
private static void OnPropertyPathPropertyChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e) { DescriptionViewer dv = depObj as DescriptionViewer; if (dv != null && dv.Initialized) { dv.LoadMetadata(false); // Changing the PropertyPath sometimes requires an update for the validation state, since it might be stale. dv.ParseTargetValidState(); } }