{"record":{"id":"652595ad0e4b1d2d","repo":"unoplatform/uno","slug":"the-targetname-property-cannot-be-empty","errorCode":null,"errorMessage":"The TargetName property cannot be empty","messagePattern":"The TargetName property cannot be empty","errorType":"exception","errorClass":"XamlGenerationException","httpStatus":null,"severity":"error","filePath":"src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs","lineNumber":3552,"sourceCode":"\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (member.Member.Name == \"DefaultBindMode\"\n\t\t\t\t\t\t\t\t&& member.Member.PreferredXamlNamespace == XamlConstants.XamlXmlNamespace)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twriter.AppendLineInvariantIndented(\"// DefaultBindMode {0}\", member.Value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (member.Member.Name == \"Class\" && member.Member.PreferredXamlNamespace == XamlConstants.XamlXmlNamespace)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\twriter.AppendLineInvariantIndented(\"// Class {0}\", member.Value, member.Value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (\n\t\t\t\t\t\t\t\tmember.Member.Name == \"TargetName\" &&\n\t\t\t\t\t\t\t\tIsAttachedProperty(member) &&\n\t\t\t\t\t\t\t\tmember.Member.DeclaringType?.Name == \"Storyboard\"\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif (member.Value == null)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthrow new XamlGenerationException(\"The TargetName property cannot be empty\", member);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar memberGlobalizedType = FindType(member.Member.DeclaringType)?.GetFullyQualifiedTypeIncludingGlobal() ?? GetGlobalizedTypeName(member.Member.DeclaringType.Name);\n\t\t\t\t\t\t\t\twriter.AppendLineInvariantIndented(@\"{0}.SetTargetName({2}, \"\"{1}\"\");\",\n\t\t\t\t\t\t\t\t\tmemberGlobalizedType,\n\t\t\t\t\t\t\t\t\tthis.RewriteAttachedPropertyPath(member.Value.ToString() ?? \"\"),\n\t\t\t\t\t\t\t\t\twriter.AppliedParameterName);\n\n\t\t\t\t\t\t\t\twriter.AppendLineInvariantIndented(\"{0}.SetTarget({2}, _{1}Subject);\",\n\t\t\t\t\t\t\t\t\tmemberGlobalizedType,\n\t\t\t\t\t\t\t\t\tmember.Value,\n\t\t\t\t\t\t\t\t\twriter.AppliedParameterName);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (\n\t\t\t\t\t\t\t\tmember.Member.Name == \"TargetName\" &&\n\t\t\t\t\t\t\t\t!IsAttachedProperty(member) &&\n\t\t\t\t\t\t\t\t(member.Member.DeclaringType?.Name.EndsWith(\"ThemeAnimation\", StringComparison.Ordinal) ?? false)\n\t\t\t\t\t\t\t)","sourceCodeStart":3534,"sourceCodeEnd":3570,"githubUrl":"https://github.com/unoplatform/uno/blob/04183404888ea21b4e5bfa3493e8d5f15e972c3a/src/SourceGenerators/Uno.UI.SourceGenerators/XamlGenerator/XamlFileGenerator.cs#L3534-L3570","documentation":"Thrown in the Storyboard attached-property branch when member.Member.Name == \"TargetName\", IsAttachedProperty is true, DeclaringType is Storyboard, but member.Value is null. Storyboard.SetTargetName requires a non-empty target name string; an empty value cannot be emitted into the generated SetTargetName call.","triggerScenarios":"Writing <Storyboard ... Storyboard.TargetName=\"\"> on an animation; a binding/markup that evaluates TargetName to nothing; an animation element with an empty TargetName attribute.","commonSituations":"Authoring an animation and leaving TargetName blank intending to set it later; copy-paste that drops the value; a malformed binding expression in the attribute.","solutions":["Provide a non-empty TargetName matching an x:Name of a target element in scope, e.g. Storyboard.TargetName=\"MyRectangle\".","Ensure the named target element exists with a matching x:Name in the same namescope.","If the animation is template-scoped, confirm the target name exists within the template's namescope."],"exampleFix":"<!-- before -->\n<DoubleAnimation Storyboard.TargetName=\"\" Storyboard.TargetProperty=\"Opacity\"/>\n\n<!-- after -->\n<DoubleAnimation Storyboard.TargetName=\"MyRectangle\" Storyboard.TargetProperty=\"Opacity\"/>","handlingStrategy":"validation","validationCode":"# Flag animations with empty Storyboard.TargetName\nGet-ChildItem -Recurse -Filter *.xaml | ForEach-Object {\n  Select-String -Path $_.FullName -Pattern 'Storyboard\\.TargetName=\"\\s*\"' |\n    ForEach-Object { Write-Warning \"$($_.Filename):$($_.LineNumber): empty Storyboard.TargetName\" }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair Storyboard.TargetName with an existing x:Name in scope.","When authoring animations, set TargetName and TargetProperty together from the start."],"tags":["xaml","storyboard","animation","target-name","build"],"backgroundTag":null,"analyzedSha":"04183404888ea21b4e5bfa3493e8d5f15e972c3a","analyzedAt":"2026-08-13T21:08:11.651Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}