unoplatform/uno · error · Exception
Missing parenthesis?
Error message
Missing parenthesis?
What it means
Thrown by the x:Bind path parser (ParseXBindPath) when an opening '(' is consumed for a parenthesized expression or cast, but the matching ')' is not found after parsing the inner expression. The parser advances past '(', recursively parses a sub-path, then expects ')' as the terminator.
Source
Thrown at src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/Utils/XBindExpressionParser.CoreParser.cs:157
private void SkipWhitespaces()
{
while (char.IsWhiteSpace(Current))
{
_position++;
}
}
private XBindPath ParseXBindPath()
{
XBindPath path;
if (Current == '(')
{
_position++;
var expression = ParseXBindPath();
if (Current != ')')
{
throw new Exception("Missing parenthesis?");
}
_position++;
if (char.IsLetter(Current))
{
var expression2 = ParseXBindPath();
return new XBindCast() { Expression = expression2, Type = expression };
}
var isPathlessCast = Current != '.' && Current != '[';
path = new XBindParenthesizedExpression() { Expression = expression, IsPathlessCast = isPathlessCast };
}
else
{
path = ParseXBindIdentifier();
}
View on GitHub (pinned to 0418340488)
Solutions
- Locate the x:Bind expression reported in the build error and inspect every '(' — ensure each has a matching ')'.
- If using cast syntax {x:Bind (Type)Member}, verify the full pattern '(Type)Member' is present.
- Remove any stray '(' that was not intended as a cast or grouping.
Example fix
<!-- before -->
<Text Text="{x:Bind (MyConvert ActualText}" />
<!-- after -->
<Text Text="{x:Bind (MyConvert)ActualText}" /> Defensive patterns
Strategy: validation
Validate before calling
// Before building, validate x:Bind expressions have balanced parens:
// In a pre-build XAML linting step or editor, check:
// - Every '(' in an x:Bind path has a matching ')'
// - Cast syntax follows '(Type)Member' exactly
// Most IDEs with XAML language services flag unbalanced parens at edit time. Prevention
- Use an XAML-aware editor that highlights unbalanced parentheses in bindings.
- When writing cast syntax in x:Bind, type the full '(Type)Member' pattern before moving on.
- Run a XAML linter before committing.
When it happens
Trigger: An x:Bind expression contains an unmatched '(' — e.g. {x:Bind (MyType)Field} is valid, but a malformed binding like {x:Bind (MyType Field} (missing close paren) or a truncation in the binding path triggers this.
Common situations: Typo in a cast or parenthesized x:Bind expression; copy-paste of a C# cast expression into x:Bind without the closing parenthesis; binding path truncated by an XAML editor or merge tool.
Related errors
- Expected attached property path to be member access.
- Expected ')' in attached property syntax.
- Invalid identifier character {Current}
- x:Bind indexing expects a single literal argument
- Only properties and fields can be indexed.
AI-assisted analysis of unoplatform/uno@0418340488 (2026-08-13).
Data as JSON: /api/errors/69fdf1506b5b97f7.
Report an issue: GitHub.