{"record":{"id":"f7139e7e81874f4c","repo":"dotnet/wpf","slug":"sr-namescopeduplicatenamesnotallowed","errorCode":null,"errorMessage":"SR.NameScopeDuplicateNamesNotAllowed","messagePattern":"SR\\.NameScopeDuplicateNamesNotAllowed","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/NameScope.cs","lineNumber":56,"sourceCode":"                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));\n                }\n            }\n        }\n\n        /// <summary>\n        /// Unregister Name-Object Map\n        /// </summary>\n        /// <param name=\"name\">name to be registered</param>\n        public void UnregisterName(string name)\n        {\n            ArgumentNullException.ThrowIfNull(name);\n\n            if (name.Length == 0)\n            {\n                throw new ArgumentException(SR.NameScopeNameNotEmptyString);\n            }\n\n            if (_nameMap?[name] is null)","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/NameScope.cs#L38-L74","documentation":"NameScope.RegisterName throws ArgumentException(SR.NameScopeDuplicateNamesNotAllowed) when the name is already registered to a DIFFERENT object. Re-registering the same name for the same object is a no-op, but mapping one name to two elements is ambiguous and forbidden.","triggerScenarios":"Calling RegisterName(\"x\", elementA) then RegisterName(\"x\", elementB) on the same NameScope; duplicated x:Name values within one XAML namescope.","commonSituations":"Copy-pasted XAML elements retaining the same x:Name, programmatic loops registering each item under a constant name, template instantiation into a shared scope.","solutions":["UnregisterName the old registration first if reassignment is intended.","Ensure each registered element gets a unique name (suffix with an index).","Fix duplicated x:Name attributes in the XAML markup."],"exampleFix":"// before\nscope.RegisterName(\"item\", newItem); // 'item' already maps to oldItem\n// after\nif (scope.FindName(\"item\") != null) scope.UnregisterName(\"item\");\nscope.RegisterName(\"item\", newItem);","handlingStrategy":"validation","validationCode":"var existing = nameScope.FindName(name); if (existing != null && !ReferenceEquals(existing, element)) nameScope.UnregisterName(name);","typeGuard":null,"tryCatchPattern":"try { nameScope.RegisterName(name, element); } catch (ArgumentException ex) when (ex.Message.Contains(\"Duplicate\")) { nameScope.UnregisterName(name); nameScope.RegisterName(name, element); }","preventionTips":["Generate unique names (e.g. name + index) in loops","Check x:Name uniqueness in XAML before building","Unregister before re-registering a changed mapping"],"tags":["xaml","namescope","duplicate-key"],"backgroundTag":"conflicting-config-options","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"}