{"record":{"id":"12d838d69899fbd6","repo":"dotnet/wpf","slug":"sr-namescopeinvalididentifiername","errorCode":null,"errorMessage":"SR.NameScopeInvalidIdentifierName","messagePattern":"SR\\.NameScopeInvalidIdentifierName","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/NameScope.cs","lineNumber":38,"sourceCode":"    {\n        /// <summary>\n        /// Register Name-Object Map\n        /// </summary>\n        /// <param name=\"name\">name to be registered</param>\n        /// <param name=\"scopedElement\">object mapped to name</param>\n        public void RegisterName(string name, object scopedElement)\n        {\n            ArgumentNullException.ThrowIfNull(name);\n            ArgumentNullException.ThrowIfNull(scopedElement);\n\n            if (name.Length == 0)\n            {\n                throw new ArgumentException(SR.NameScopeNameNotEmptyString);\n            }\n\n            if (!NameValidationHelper.IsValidIdentifierName(name))\n            {\n                throw new ArgumentException(SR.Format(SR.NameScopeInvalidIdentifierName, name));\n            }\n\n            if (_nameMap is null)\n            {\n                _nameMap = new HybridDictionary();\n                _nameMap[name] = scopedElement;\n            }\n            else\n            {\n                object nameContext = _nameMap[name];\n                // first time adding the Name, set it\n                if (nameContext is null)\n                {\n                    _nameMap[name] = scopedElement;\n                }\n                else if (scopedElement != nameContext)\n                {\n                    throw new ArgumentException(SR.Format(SR.NameScopeDuplicateNamesNotAllowed, name));","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/NameScope.cs#L20-L56","documentation":"NameScope.RegisterName throws ArgumentException(SR.NameScopeInvalidIdentifierName) when the name is not a valid identifier per NameValidationHelper (e.g. contains spaces, starts with a digit, or has invalid characters). XAML names must be legal identifiers to be referenced in markup and generated code.","triggerScenarios":"Calling RegisterName with names like \"my name\", \"1st\", \"a-b\"; any name failing NameValidationHelper.IsValidIdentifierName.","commonSituations":"Generating names from user input or file names, localizing names with spaces, converting element titles directly into names.","solutions":["Sanitize the name to a valid identifier (letters/digits/underscore, not starting with a digit) before registering.","Use a helper that generates safe names (e.g. prefix + counter).","Validate with the same rules the library uses before calling RegisterName."],"exampleFix":"// before\nscope.RegisterName(userInput, element);\n// after\nstring safe = System.Text.RegularExpressions.Regex.Replace(userInput, \"[^A-Za-z0-9_]\", \"_\");\nif (safe.Length > 0 && char.IsDigit(safe[0])) safe = \"_\" + safe;\nscope.RegisterName(safe, element);","handlingStrategy":"validation","validationCode":"static bool IsValidXamlName(string n) => !string.IsNullOrEmpty(n) && !char.IsDigit(n[0]) && n.All(c => char.IsLetterOrDigit(c) || c == '_');","typeGuard":"bool IsSafeName(string n) => !string.IsNullOrEmpty(n) && System.Text.RegularExpressions.Regex.IsMatch(n, \"^[A-Za-z_][A-Za-z0-9_]*$\");","tryCatchPattern":"try { nameScope.RegisterName(name, element); } catch (ArgumentException ex) when (ex.Message.Contains(\"identifier\")) { /* sanitize and retry */ }","preventionTips":["Sanitize names with a regex whitelist before registration","Never use display text or file names directly as XAML names"],"tags":["xaml","namescope","identifier-validation"],"backgroundTag":"invalid-identifier-format","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}