{"record":{"id":"cecdc55fcce3814b","repo":"dotnet/wpf","slug":"sr-namescopeinvalididentifiername-namescope","errorCode":null,"errorMessage":"SR.NameScopeInvalidIdentifierName","messagePattern":"SR\\.NameScopeInvalidIdentifierName","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/NameScope.cs","lineNumber":46,"sourceCode":"    {        \n        #region INameScope\n        \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                throw new ArgumentException(SR.NameScopeNameNotEmptyString);\n\n            if (!NameValidationHelper.IsValidIdentifierName(name))\n            {\n                throw new ArgumentException(SR.Format(SR.NameScopeInvalidIdentifierName, name));\n            }\n\n            if (_nameMap == 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 == null)\n                {\n                    _nameMap[name] = scopedElement;\n                }\n                else if (scopedElement != nameContext)\n                {\n                    throw new ArgumentException(SR.Format(SR.NameScopeDuplicateNamesNotAllowed, name));","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/NameScope.cs#L28-L64","documentation":"NameScope.RegisterName throws ArgumentException(SR.NameScopeInvalidIdentifierName) when the name is non-empty but is not a valid XAML identifier (per NameValidationHelper.IsValidIdentifierName). XAML names must follow identifier rules (e.g. start with a letter or underscore, no invalid characters).","triggerScenarios":"Calling RegisterName with names containing spaces, dots, digits at the start, or other non-identifier characters (e.g. \"my control\", \"1stItem\", \"a-b\").","commonSituations":"Using user-entered text or file names as element names; constructing names by concatenation with delimiters; localized strings used as names; porting WinForms control names that allow characters XAML disallows.","solutions":["Sanitize the name with NameValidationHelper.IsValidIdentifierName (or equivalent regex like ^[A-Za-z_][\\w]*$) before registering.","Strip or replace invalid characters programmatically before calling RegisterName.","Prefix with a letter/underscore when the name starts with a digit.","Catch ArgumentException and surface a user-facing 'invalid name' message."],"exampleFix":"// before\nscope.RegisterName(userText, element); // userText = \"my control\"\n// after\nvar safe = new string(userText.Where(char.IsLetterOrDigit).ToArray());\nif (safe.Length > 0 && !char.IsDigit(safe[0]))\n    scope.RegisterName(safe, element);","handlingStrategy":"validation","validationCode":"bool valid = !string.IsNullOrEmpty(name) && System.Text.RegularExpressions.Regex.IsMatch(name, \"^[A-Za-z_][A-Za-z0-9_]*$\");","typeGuard":"static bool IsValidXamlName(string name) => !string.IsNullOrEmpty(name) && System.Text.RegularExpressions.Regex.IsMatch(name, \"^[A-Za-z_][A-Za-z0-9_]*$\");","tryCatchPattern":"try { scope.RegisterName(name, element); }\ncatch (ArgumentException ex) { /* name is not a valid XAML identifier */ }","preventionTips":["Sanitize user/file-derived strings before using them as XAML names.","Remember XAML identifier rules: start with letter/underscore, letters/digits/underscores only.","Add a name-format unit test for any name-generating code."],"tags":["wpf","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-22T01:17:13.364Z"}