File-New-Project/EarTrumpet · error · Exception
BrushValueParser Error: '{value}' {element}
Error message
BrushValueParser Error: '{value}' {element} What it means
The entire body of BrushValueParser.Parse is wrapped in try/catch that rethrows every failure as a new Exception("BrushValueParser Error: ...", ex). The real cause is in InnerException — typically one of the inner NotImplementedException throws (unknown theme key, rule-not-found, bad slashes) or a FormatException from color parsing. The wrapper preserves the offending value and element for diagnostics.
Source
Thrown at EarTrumpet/UI/Themes/BrushValueParser.cs:172
// But it will succeed when the element Loaded is called.
ret = Colors.HotPink;
Trace.WriteLine($"## BrushValueParser Parse FAILED ## '{value}' {element}");
}
}
else
{
ret = color;
}
if (opacity > 0)
{
ret.A = (byte)(opacity * 255);
}
return new SolidColorBrush(ret);
}
catch (Exception ex)
{
throw new Exception($"BrushValueParser Error: '{value}' {element}", ex);
}
}
private static bool FindReference(DependencyObject element, string searchKey, out SolidColorBrush outRef)
{
bool isLight = Options.GetSource(element) == Options.SourceKind.App ? SystemSettings.IsLightTheme : SystemSettings.IsSystemLightTheme;
var reference = Manager.Current.References.FirstOrDefault(r => r.Key == searchKey.Split('/')[0]);
if (reference != null)
{
if (reference.Value != null)
{
outRef = Parse(element, reference.Value);
return true;
}
else
{
var tab = new Dictionary<Rule.Kind, bool>();
tab.Add(Rule.Kind.Any, true);
View on GitHub (pinned to aa894e51c2)
Solutions
- Read ex.InnerException to find the true failure (one of errors 7, 8, 10, 11 or a FormatException) and fix that specific cause.
- Validate the theme value string against the supported grammar (scope:key=value pairs, optional /opacity, known color names) before passing to Parse.
- Ensure any referenced Manager.References key is defined.
- Test with the target Windows build so Immersive color names resolve.
Example fix
// before: value = "Bacground=#FF0000" // typo, not a known color -> wrapped error
// after: value = "Background=#FF0000"
// diagnostic: catch (Exception ex) { var root = ex.InnerException ?? ex; Trace.WriteLine(root.Message); } Defensive patterns
Strategy: try-catch
Validate before calling
// optional: validate grammar before Parse
static bool IsValidMarkup(string v)
{
if (string.IsNullOrWhiteSpace(v)) return false;
foreach (var seg in v.Split(','))
foreach (var part in seg.Split('/'))
if (part.IndexOf('=') < 0 && part.Length == 0) return false;
return true;
} Try / catch
try { return BrushValueParser.Parse(element, value); }
catch (Exception ex)
{
var root = ex.InnerException ?? ex;
Trace.WriteLine($"BrushValueParser failed for '{value}': {root.Message}");
return new SolidColorBrush(Colors.HotPink); // mirror the in-parser fallback
} Prevention
- Always inspect InnerException — the wrapper hides the real cause.
- Lint theme markup in CI for known color names and valid opacity segments.
- Confirm referenced Manager keys exist and Immersive colors exist on the target OS build.
When it happens
Trigger: Any unhandled failure inside Parse: an unknown color name that is not a hex color, Immersive color, Colors/SystemColors property, nor a resolvable reference; a malformed opacity segment; a Reference whose rules do not match; the HighContrast/Dark/Light fallthroughs.
Common situations: Typo in a theme brush string; reference to an undefined Manager key; color name not present on the running Windows build (Immersive color missing); malformed "Color/0.5/0.2" opacity.
Related errors
AI-assisted analysis of File-New-Project/EarTrumpet@aa894e51c2 (2026-08-13).
Data as JSON: /api/errors/541a069733695225.
Report an issue: GitHub.