{"record":{"id":"e699ff8e76d5671a","repo":"dotnet/wpf","slug":"sr-adornernotfound","errorCode":null,"errorMessage":"SR.AdornerNotFound","messagePattern":"SR\\.AdornerNotFound","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/AdornerLayer.cs","lineNumber":567,"sourceCode":"            UpdateAdorner(null);\n        }\n\n        /// <summary>\n        /// Set the zOrder on the given adorner.\n        /// </summary>\n        /// <param name=\"adorner\"></param>\n        /// <param name=\"zOrder\"></param>\n        internal void SetAdornerZOrder(Adorner adorner, int zOrder)\n        {\n            ArrayList adornerInfos = ElementMap[adorner.AdornedElement] as ArrayList;\n            if (adornerInfos == null)\n            {\n                throw new InvalidOperationException(SR.AdornedElementNotFound);\n            }\n            AdornerInfo adornerInfo = GetAdornerInfo(adornerInfos, adorner);\n            if (adornerInfo == null)\n            {\n                throw new InvalidOperationException(SR.AdornerNotFound);\n            }\n\n            RemoveAdornerInfo(_zOrderMap, adorner, adornerInfo.ZOrder);\n            _children.Remove(adorner);\n            adornerInfo.ZOrder = zOrder;\n            AddAdornerToVisualTree(adornerInfo, zOrder);\n            InvalidateAdorner(adornerInfo);\n            UpdateAdorner(adorner.AdornedElement);\n        }\n\n        /// <summary>\n        /// Query the zOrder on the given adorner.\n        /// </summary>\n        /// <param name=\"adorner\"></param>\n        /// <returns>zOrder of given adorner</returns>\n        internal int GetAdornerZOrder(Adorner adorner)\n        {\n            ArrayList adornerInfos = ElementMap[adorner.AdornedElement] as ArrayList;","sourceCodeStart":549,"sourceCodeEnd":585,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/AdornerLayer.cs#L549-L585","documentation":"AdornerLayer.SetAdornerZOrder throws InvalidOperationException(SR.AdornerNotFound) when the adorned element IS registered on the layer, but this specific adorner instance has no AdornerInfo there — the adorner itself is not (or no longer) present. The layer found the element's adorner list but no matching entry for this adorner.","triggerScenarios":"Calling SetAdornerZOrder with an adorner that was removed via Remove/RemoveAllAdorners while other adorners for the same element remain; passing a new/clone adorner instance that was never added; duplicate adorners where one instance was already disposed.","commonSituations":"Holding two references to what you assume is one adorner but is actually two instances; removing an adorner in one code path while another path later adjusts its z-order; re-creating adorners on data refresh and updating z-order on the stale instance.","solutions":["Confirm via Array.IndexOf(AdornerLayer.GetAdorners(element), adorner) >= 0 that this exact instance is still attached.","Re-add the adorner with layer.Add(adorner) before setting z-order if it was removed.","Track adorner instances in a single owner so removal and z-order updates use the same reference.","Wrap in try/catch for InvalidOperationException in frameworks where adorner lifetime is external."],"exampleFix":"// before\nadornerLayer.SetAdornerZOrder(staleAdorner, 1); // AdornerNotFound\n// after\nvar adorners = AdornerLayer.GetAdorners(element);\nif (adorners != null && adorners.Contains(adorner))\n    adornerLayer.SetAdornerZOrder(adorner, 1);","handlingStrategy":"validation","validationCode":"var adorners = AdornerLayer.GetAdorners(adorner.AdornedElement);\nif (adorners == null || Array.IndexOf(adorners, adorner) < 0) return; // skip, not attached","typeGuard":"bool IsAttached(this Adorner a) { var l = AdornerLayer.GetAdorners(a.AdornedElement); return l != null && l.Contains(a); }","tryCatchPattern":"try { adornerLayer.SetAdornerZOrder(adorner, z); } catch (InvalidOperationException) { /* instance detached; recreate and re-add */ }","preventionTips":["Distinguish element-registered vs instance-attached states when debugging adorners","Avoid cloning adorners; reuse the added instance","Remove-then-zoom patterns should re-Add before reordering"],"tags":["wpf","adorner","invalidoperation","zorder"],"backgroundTag":"record-not-found","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"}