{"record":{"id":"eaae74b047db1ef1","repo":"dotnet/wpf","slug":"sr-invaliditemcontainer","errorCode":null,"errorMessage":"SR.InvalidItemContainer","messagePattern":"SR\\.InvalidItemContainer","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/StatusBar.cs","lineNumber":123,"sourceCode":"\n        protected override DependencyObject GetContainerForItemOverride()\n        {\n            object currentItem = _currentItem;\n            _currentItem = null;\n\n            if (UsesItemContainerTemplate)\n            {\n                DataTemplate itemContainerTemplate = ItemContainerTemplateSelector.SelectTemplate(currentItem, this);\n                if (itemContainerTemplate != null)\n                {\n                    object itemContainer = itemContainerTemplate.LoadContent();\n                    if (itemContainer is StatusBarItem || itemContainer is Separator)\n                    {\n                        return itemContainer as DependencyObject;\n                    }\n                    else\n                    {\n                        throw new InvalidOperationException(SR.Format(SR.InvalidItemContainer, this.GetType().Name, nameof(StatusBarItem), nameof(Separator), itemContainer));\n                    }\n                }\n            }\n\n            return new StatusBarItem();\n        }\n        /// <summary>\n        /// Prepare the element to display the item.  This may involve\n        /// applying styles, setting bindings, etc.\n        /// </summary>\n        protected override void PrepareContainerForItemOverride(DependencyObject element, object item)\n        {\n            base.PrepareContainerForItemOverride(element, item);\n\n            Separator separator = element as Separator;\n            if (separator != null)\n            {\n                bool hasModifiers;","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Controls/Primitives/StatusBar.cs#L105-L141","documentation":"StatusBar.GetContainerForItemOverride verifies that a generated or returned item container is either a StatusBarItem or a Separator. If PrepareContainerForItemOverride/GetContainerForItemOverride receives anything else, it throws InvalidOperationException naming the StatusBar type and the two valid container types. This guards StatusBar's invariant that every direct child container is one of the two supported types.","triggerScenarios":"Overriding GetContainerForItemOverride/PrepareContainerForItemOverride in a StatusBar subclass and returning a wrong container type (e.g. ContentPresenter, ListBoxItem); a custom ItemsPanel or style forcing a different container; reusing a ListBox-derived container factory for StatusBar.","commonSituations":"Customizing StatusBar item presentation by subclassing; copying container-generation code from ListBox into StatusBar; templates that implicitly produce a different container.","solutions":["Return a StatusBarItem (or Separator) from GetContainerForItemOverride, or call base.GetContainerForItemOverride()","If custom content is needed, wrap it inside StatusBarItem.Content rather than replacing the container type","Remove any override or style that changes the ItemContainer for the StatusBar"],"exampleFix":"// before\nprotected override DependencyObject GetContainerForItemOverride()\n    => new ListBoxItem(); // wrong container -> throws\n// after\nprotected override DependencyObject GetContainerForItemOverride()\n    => new StatusBarItem();","handlingStrategy":"try-catch","validationCode":"protected override DependencyObject GetContainerForItemOverride()\n{\n    var c = base.GetContainerForItemOverride();\n    if (c is not StatusBarItem and not Separator)\n        throw new InvalidOperationException(\"StatusBar containers must be StatusBarItem or Separator.\");\n    return c;\n}","typeGuard":null,"tryCatchPattern":"try\n{\n    statusBar.Items.Add(container);\n}\ncatch (InvalidOperationException ex)\n{\n    // wrap in StatusBarItem before adding\n}","preventionTips":["Always return StatusBarItem/Separator from GetContainerForItemOverride overrides","Don't copy ListBox container code into StatusBar subclasses","Use StatusBarItem.Content for custom visuals"],"tags":["wpf","statusbar","itemcontainer","invalidoperation"],"backgroundTag":"type-mismatch","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"}