{"record":{"id":"cafe38ed6cecb8d9","repo":"dotnet/wpf","slug":"xamlschemaexception-sr-format-sr-xamltype","errorCode":null,"errorMessage":"XamlSchemaException(SR.Format(SR.UsableDuringInitializationOnME, this))","messagePattern":"XamlSchemaException\\(SR\\.Format\\(SR\\.UsableDuringInitializationOnME, this\\)\\)","errorType":"exception","errorClass":"XamlSchemaException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlType.cs","lineNumber":1764,"sourceCode":"                case BoolTypeBits.NameScope:\n                    bit = LookupIsNameScope();\n                    break;\n\n                case BoolTypeBits.Public:\n                    bit = LookupIsPublic();\n                    break;\n\n                case BoolTypeBits.TrimSurroundingWhitespace:\n                    bit = LookupTrimSurroundingWhitespace();\n                    break;\n\n                case BoolTypeBits.UsableDuringInitialization:\n                    bit = LookupUsableDuringInitialization();\n                    if (bit && IsMarkupExtension)\n                    {\n                        // MarkupExtension cannot be used during initialization.\n                        string err = SR.Format(SR.UsableDuringInitializationOnME, this);\n                        throw new XamlSchemaException(err);\n                    }\n\n                    break;\n\n                case BoolTypeBits.WhitespaceSignificantCollection:\n                    bit = LookupIsWhitespaceSignificantCollection();\n                    break;\n\n                case BoolTypeBits.XmlData:\n                    bit = LookupIsXData();\n                    break;\n\n                case BoolTypeBits.Ambient:\n                    bit = LookupIsAmbient();\n                    break;\n\n                default:\n                    Debug.Fail(\"Enum out of range\");","sourceCodeStart":1746,"sourceCodeEnd":1782,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/XamlType.cs#L1746-L1782","documentation":"XAML forbids markup extensions from being marked UsableDuringInitialization, because an extension must be fully constructed from its constructor/property inputs before providing its value; being usable during initialization is contradictory. When a type reports UsableDuringInitialization == true and IsMarkupExtension == true, XamlSchemaException UsableDuringInitializationOnME is thrown during the cached bit lookup.","triggerScenarios":"Applying [UsableDuringInitialization(true)] to a class deriving from MarkupExtension, or LookupUsableDuringInitialization discovering such an attribute while resolving the type's boolean bits during XAML parsing or type lookup.","commonSituations":"Custom markup extensions that copy attribute sets from regular objects; WPF-era attributes carried over when porting a class to System.Xaml; reflection-based metadata incorrectly reporting the attribute.","solutions":["Remove the [UsableDuringInitialization(true)] attribute from the markup extension class","Set UsableDuringInitialization(false) explicitly on the type","If the attribute comes from a base class, exclude it via attribute filtering or restructure inheritance"],"exampleFix":"// before\n[UsableDuringInitialization(true)]\npublic class MyExtension : MarkupExtension { ... }\n// after\npublic class MyExtension : MarkupExtension { ... } // attribute removed","handlingStrategy":"validation","validationCode":"bool bad = typeof(MyExtension).IsDefined(typeof(UsableDuringInitializationAttribute), false)\n    && typeof(System.Xaml.Markup.MarkupExtension).IsAssignableFrom(typeof(MyExtension));","typeGuard":null,"tryCatchPattern":"try { var bit = xamlType.UsableDuringInitialization; }\ncatch (XamlSchemaException ex) { /* remove offending attribute from the extension */ }","preventionTips":["Never apply UsableDuringInitialization(true) to MarkupExtension-derived classes","Audit attribute copying when porting WPF classes to System.Xaml","Run XAML type resolution tests over all custom markup extensions"],"tags":["markupextension","schema-exception","usable-during-initialization","xaml"],"backgroundTag":"schema-validation-failed","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"}