{"record":{"id":"5065a4bc9e1e2562","repo":"dotnet/wpf","slug":"sr-format-sr-typemustbedependencyobjectderived-fortype-name","errorCode":null,"errorMessage":"SR.Format(SR.TypeMustBeDependencyObjectDerived, forType.Name)","messagePattern":"SR\\.Format\\(SR\\.TypeMustBeDependencyObjectDerived, forType\\.Name\\)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/DependencyProperty.cs","lineNumber":460,"sourceCode":"        /// what we are overriding.\n        /// </summary>\n        private void SetupOverrideMetadata(\n                Type forType,\n                PropertyMetadata typeMetadata,\n            out DependencyObjectType dType,\n            out PropertyMetadata baseMetadata )\n        {\n            ArgumentNullException.ThrowIfNull(forType);\n            ArgumentNullException.ThrowIfNull(typeMetadata);\n\n            if (typeMetadata.Sealed)\n            {\n                throw new ArgumentException(SR.TypeMetadataAlreadyInUse);\n            }\n\n            if (!typeof(DependencyObject).IsAssignableFrom(forType))\n            {\n                throw new ArgumentException(SR.Format(SR.TypeMustBeDependencyObjectDerived, forType.Name));\n            }\n\n            // Ensure default value is a correct value (if it was supplied,\n            // otherwise, the default value will be taken from the base metadata\n            // which was already validated)\n            if (typeMetadata.IsDefaultValueModified)\n            {\n                // Will throw ArgumentException if fails.\n                ValidateMetadataDefaultValue( typeMetadata, PropertyType, Name, ValidateValueCallback );\n            }\n\n            // Force all base classes to register their metadata\n            dType = DependencyObjectType.FromSystemType(forType);\n\n            // Get metadata for the base type\n            baseMetadata = GetMetadata(dType.BaseType);\n\n            // Make sure overriding metadata is the same type or derived type of","sourceCodeStart":442,"sourceCodeEnd":478,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/DependencyProperty.cs#L442-L478","documentation":"OverrideMetadata requires forType to be a DependencyObject-derived class, since only DependencyObjects participate in the WPF property system. Passing a plain CLR type throws with the type's name in the message.","triggerScenarios":"Calling dp.OverrideMetadata(typeof(SomePlainClass), new PropertyMetadata(...)) where SomePlainClass does not derive from DependencyObject.","commonSituations":"Attempting to override metadata for POCOs, structs, or non-visual model classes; refactoring a class to no longer inherit from DependencyObject while keeping its metadata overrides.","solutions":["Make the type derive from DependencyObject (directly or transitively) before overriding metadata.","Remove the OverrideMetadata call if the type intentionally is not a DependencyObject.","Move custom state to an attached-property owner that is a DependencyObject."],"exampleFix":"// before\nclass MyModel { }\nMyProp.OverrideMetadata(typeof(MyModel), new PropertyMetadata(1));\n// after\nclass MyModel : DependencyObject { }\nMyProp.OverrideMetadata(typeof(MyModel), new PropertyMetadata(1));","handlingStrategy":"type-guard","validationCode":"if (!typeof(DependencyObject).IsAssignableFrom(forType)) throw new ArgumentException($\"{forType.Name} must derive from DependencyObject\");","typeGuard":"static bool CanOverrideMetadata(Type forType) => typeof(DependencyObject).IsAssignableFrom(forType);","tryCatchPattern":null,"preventionTips":["Only call OverrideMetadata on DependencyObject-derived types","Check class hierarchy before attaching WPF property-system behavior to POCOs"],"tags":["wpf","dependency-property","inheritance"],"backgroundTag":"incompatible-source-type","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"}