public CSSStyleDeclaration GetStyleDiff(CSSStyleDeclaration style1, CSSStyleDeclaration style2) { var type1 = style1.GetType(); var type2 = style2.GetType(); var fields1 = type1.GetProperties().ToDictionary(x => x.Name, x => x.GetValue(style1)); var fields2 = type2.GetProperties().ToDictionary(x => x.Name, x => x.GetValue(style2)); var resultStyle = style2.Clone() as CSSStyleDeclaration; foreach (var keyValuePair in fields1) { var fieldName = keyValuePair.Key; var fieldValue1 = keyValuePair.Value; var fieldValue2 = fields2[fieldName]; var jt1 = JsonConvert.SerializeObject(fieldValue1); var jt2 = JsonConvert.SerializeObject(fieldValue2); if (jt1 != jt2) { resultStyle.GetType().GetProperty(fieldName).SetValue(resultStyle, fieldValue2); } } return(resultStyle); }
public static Dictionary <string, CssFieldRef> ExtractAllFields(this CSSStyleDeclaration cssStyleDeclaration) { var fields = new Dictionary <string, CssFieldRef>(); var type = cssStyleDeclaration.GetType(); ExtractAllFields(type, fields); return(fields); }
private CSSStyleDeclaration MergeStyle(CSSStyleDeclaration def1, CSSStyleDeclaration def2) { var result = def2.Clone() as CSSStyleDeclaration; foreach (var def1ChangedField in def1.ChangedFields) { var isDoubleChenge = def2.ChangedFields.FirstOrDefault(x => x == def1ChangedField); if (isDoubleChenge == null) { var def1PropertyValue = def1.GetType().GetProperty(def1ChangedField).GetValue(def1); result.GetType().GetProperty(def1ChangedField).SetValue(result, def1PropertyValue); } } return(result); }