From ddd53b1c667916085e3ffceead1eb91fd0092604 Mon Sep 17 00:00:00 2001 From: ElektroKill Date: Tue, 31 Mar 2026 16:32:11 +0200 Subject: [PATCH] Fix #3689: Only move properties with setters to XAML attributes --- .../Rewrite/AttributeRewritePass.cs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs b/ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs index 2b7c5586f..31bd0f299 100644 --- a/ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs +++ b/ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs @@ -24,6 +24,7 @@ using System.Collections.Generic; using System.Xml.Linq; using ICSharpCode.BamlDecompiler.Xaml; +using ICSharpCode.Decompiler.TypeSystem; namespace ICSharpCode.BamlDecompiler.Rewrite { @@ -59,20 +60,25 @@ namespace ICSharpCode.BamlDecompiler.Rewrite bool RewriteElement(XamlContext ctx, XElement parent, XElement elem) { - var property = elem.Annotation(); - if (property == null && elem.Name != key) - return false; - if (elem.HasAttributes || elem.HasElements) return false; - ctx.CancellationToken.ThrowIfCancellationRequested(); - - var value = elem.Value; var attrName = elem.Name; if (attrName != key) + { + var property = elem.Annotation(); + if (property is null) + return false; + + if (property.ResolvedMember is IProperty propertyDef && !propertyDef.CanSet) + return false; + attrName = property.ToXName(ctx, parent, property.IsAttachedTo(parent.Annotation())); - var attr = new XAttribute(attrName, value); + } + + ctx.CancellationToken.ThrowIfCancellationRequested(); + + var attr = new XAttribute(attrName, elem.Value); var list = new List(parent.Attributes()); if (attrName == key) list.Insert(0, attr); @@ -85,4 +91,4 @@ namespace ICSharpCode.BamlDecompiler.Rewrite return true; } } -} \ No newline at end of file +}