{"record":{"id":"ce8ebbf00e381325","repo":"dotnet/wpf","slug":"sr-stringempty","errorCode":null,"errorMessage":"SR.StringEmpty","messagePattern":"SR\\.StringEmpty","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/DependencyProperty.cs","lineNumber":242,"sourceCode":"        /// <param name=\"propertyType\">Type of the property</param>\n        /// <param name=\"ownerType\">Type that is registering the property</param>\n        /// <param name=\"defaultMetadata\">Metadata to use if current type doesn't specify type-specific metadata</param>\n        /// <param name=\"validateValueCallback\">Provides additional value validation outside automatic type validation</param>\n        /// <returns>Dependency Property</returns>\n        public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback)\n        {\n            RegisterParameterValidation(name, propertyType, ownerType);\n\n            return RegisterCommon( name, propertyType, ownerType, defaultMetadata, validateValueCallback );\n        }\n\n        private static void RegisterParameterValidation(string name, Type propertyType, Type ownerType)\n        {\n            ArgumentNullException.ThrowIfNull(name);\n\n            if (name.Length == 0)\n            {\n                throw new ArgumentException(SR.StringEmpty, nameof(name));\n            }\n\n            ArgumentNullException.ThrowIfNull(ownerType);\n            ArgumentNullException.ThrowIfNull(propertyType);\n        }\n\n        private static DependencyProperty RegisterCommon(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback)\n        {\n            FromNameKey key = new(name, ownerType);\n            lock (Synchronized)\n            {\n                if (PropertyFromName.ContainsKey(key))\n                {\n                    throw new ArgumentException(SR.Format(SR.PropertyAlreadyRegistered, name, ownerType.Name));\n                }\n            }\n\n            // Establish default metadata for all types, if none is provided","sourceCodeStart":224,"sourceCodeEnd":260,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/DependencyProperty.cs#L224-L260","documentation":"DependencyProperty.Register (and its attached/read-only variants) validates its 'name' parameter before creating a property. Throwing when the name is an empty string. WPF requires every dependency property to have a non-empty, owner-unique name used for lookup, XAML binding, and property-system bookkeeping.","triggerScenarios":"Calling DependencyProperty.Register(\"\", typeof(int), typeof(MyControl)) or the same empty-string name via RegisterAttached, RegisterReadOnly, or RegisterAttachedReadOnly.","commonSituations":"Names built dynamically from variables or resource strings that resolve to \"\" (e.g. nameof() replaced by a config value that failed to load, or string concatenation where a prefix variable was empty).","solutions":["Pass a non-empty string literal (by convention the CLR property name) as the name argument.","If the name is computed, assert/validate it is non-empty before calling Register.","Prefer nameof(MyProperty) so the compiler guarantees a valid, synced name."],"exampleFix":"// before\npublic static readonly DependencyProperty ValueProperty =\n    DependencyProperty.Register(\"\", typeof(int), typeof(MyControl));\n// after\npublic static readonly DependencyProperty ValueProperty =\n    DependencyProperty.Register(nameof(Value), typeof(int), typeof(MyControl));","handlingStrategy":"validation","validationCode":"if (string.IsNullOrEmpty(name)) throw new ArgumentException(\"Dependency property name must be non-empty\", nameof(name));","typeGuard":"static bool IsValidDpName(string name) => !string.IsNullOrEmpty(name);","tryCatchPattern":null,"preventionTips":["Always use nameof(...) for the name argument","Never build DP names from external/config-driven strings"],"tags":["wpf","dependency-property","argument-validation"],"backgroundTag":"empty-required-field","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"}