{"record":{"id":"9aceb24b6edf06ae","repo":"dotnet/wpf","slug":"argumentexception-sr-format-sr-memberhasinvalidxamlname","errorCode":null,"errorMessage":"ArgumentException(SR.Format(SR.MemberHasInvalidXamlName, property.Name), nameof(property))","messagePattern":"ArgumentException\\(SR\\.Format\\(SR\\.MemberHasInvalidXamlName, property\\.Name\\), nameof\\(property\\)\\)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlXmlWriter.cs","lineNumber":191,"sourceCode":"                WriteTypeArguments(type);\n            }\n        }\n\n        public override void WriteEndObject()\n        {\n            CheckIsDisposed();\n            currentState.WriteEndObject(this);\n        }\n\n        public override void WriteStartMember(XamlMember property)\n        {\n            CheckIsDisposed();\n\n            ArgumentNullException.ThrowIfNull(property);\n\n            if (!property.IsNameValid)\n            {\n                throw new ArgumentException(SR.Format(SR.MemberHasInvalidXamlName, property.Name), nameof(property));\n            }\n\n            currentState.WriteStartMember(this, property);\n        }\n\n        public override void WriteEndMember()\n        {\n            CheckIsDisposed();\n            currentState.WriteEndMember(this);\n        }\n\n        public override void WriteValue(object value)\n        {\n            CheckIsDisposed();\n            if (value is null)\n            {\n                WriteStartObject(XamlLanguage.Null);\n                WriteEndObject();","sourceCodeStart":173,"sourceCodeEnd":209,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlXmlWriter.cs#L173-L209","documentation":"WriteStartMember validates that the XamlMember's Name is a valid XAML name; if property.IsNameValid is false it throws ArgumentException including the member's name. Member names become XML attribute/element names, so illegal characters are rejected up front.","triggerScenarios":"Calling xamlXmlWriter.WriteStartMember(property) with a XamlMember whose Name contains characters invalid for XAML/XML names (spaces, invalid leading chars, etc.).","commonSituations":"Manually constructed XamlMember instances with ad-hoc names; attached-property names built by string concatenation; members derived from CLR names that were renamed or generated with characters invalid in XML names.","solutions":["Correct the member's Name to a valid XAML identifier before writing.","Check property.IsNameValid before the call and handle invalid members separately.","Use a properly registered attachable-property definition instead of hand-built member names."],"exampleFix":"// before\nwriter.WriteStartMember(new XamlMember(\"My Property\", type, false)); // ArgumentException (space)\n// after\nwriter.WriteStartMember(new XamlMember(\"MyProperty\", type, false));","handlingStrategy":"validation","validationCode":"if (property is null) throw new ArgumentNullException(nameof(property));\nif (!property.IsNameValid) throw new ArgumentException($\"Member '{property.Name}' has an invalid XAML name\", nameof(property));\nwriter.WriteStartMember(property);","typeGuard":"bool IsWritableMember(XamlMember m) => m is not null && m.IsNameValid;","tryCatchPattern":"try { writer.WriteStartMember(property); }\ncatch (ArgumentException ex) { /* fix member name or skip member */ }","preventionTips":["Check IsNameValid before WriteStartMember for dynamically built members.","Use valid NCName identifiers when defining attachable properties.","Never embed spaces or punctuation in member names by concatenation."],"tags":["xaml","validation","naming"],"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"}