private static void ReevaluateStylesheetInSubTree(IDomElement <TDependencyObject, TDependencyProperty> domElement, StyleSheet oldStyleSheet, IDependencyPropertyService <TDependencyObject, TStyle, TDependencyProperty> dependencyPropertyService, INativeStyleService <TStyle, TDependencyObject, TDependencyProperty> nativeStyleService) { if (domElement.StyleInfo == null) { return; } if (domElement == null || !ReferenceEquals(domElement.StyleInfo.CurrentStyleSheet, oldStyleSheet)) { return; } domElement.StyleInfo.CurrentStyleSheet = GetStyleSheetFromTree(domElement, dependencyPropertyService); domElement.ClearAttributeWatcher(); foreach (var child in domElement.LogicalChildNodes.Concat(domElement.ChildNodes).Distinct().ToList()) { ReevaluateStylesheetInSubTree(child, oldStyleSheet, dependencyPropertyService, nativeStyleService); } }