[FriendAccessAllowed] // Built into Core, also used by Framework. internal static bool SerializeOn(BinaryWriter writer, string stringValue) { // ********* VERY IMPORTANT NOTE ***************** // If this method is changed, then XamlBrushSerilaizer.SerializeOn() needs // to be correspondingly changed as well. That code is linked into PBT.dll // and duplicates the code below to avoid pulling in SCB & base classes as well. // ********* VERY IMPORTANT NOTE ***************** if (writer == null) { throw new ArgumentNullException("writer"); } KnownColor knownColor = KnownColors.ColorStringToKnownColor(stringValue); #if !PBTCOMPILER // ***************** NOTE ***************** // This section under #if !PBTCOMPILER is not needed in XamlBrushSerializer.cs // because XamlBrushSerializer.SerializeOn() is only compiled when PBTCOMPILER is set. // If this code were tried to be compiled in XamlBrushSerializer.cs, it wouldn't compile // becuase of missing definition of s_knownSolidColorBrushStringCache. // This code is added in XamlBrushSerializer.cs nevertheless for maintaining consistency in the codebase // between XamlBrushSerializer.SerializeOn() and SolidColorBrush.SerializeOn(). // ***************** NOTE ***************** lock (s_knownSolidColorBrushStringCache) { if (s_knownSolidColorBrushStringCache.ContainsValue(stringValue)) { knownColor = KnownColors.ArgbStringToKnownColor(stringValue); } } #endif if (knownColor != KnownColor.UnknownColor) { // Serialize values of the type "Red", "Blue" and other names writer.Write((byte)SerializationBrushType.KnownSolidColor); writer.Write((uint)knownColor); return(true); } else { // Serialize values of the type "#F00", "#0000FF" and other hex color values. // We don't have a good way to check if this is valid without running the // converter at this point, so just store the string if it has at least a // minimum length of 4. stringValue = stringValue.Trim(); if (stringValue.Length > 3) { writer.Write((byte)SerializationBrushType.OtherColor); writer.Write(stringValue); return(true); } } return(false); }