{"record":{"id":"3345db15fde04712","repo":"dotnet/wpf","slug":"microsoft-windows-controls-sr-format-microsoft-windows-3345db","errorCode":null,"errorMessage":"Microsoft.Windows.Controls.SR.Format(Microsoft.Windows.Controls.SR.InvalidApplicationMenuOrItemContainer, this.GetType().Name, itemContainer)","messagePattern":"Microsoft\\.Windows\\.Controls\\.SR\\.Format\\(Microsoft\\.Windows\\.Controls\\.SR\\.InvalidApplicationMenuOrItemContainer, this\\.GetType\\(\\)\\.Name, itemContainer\\)","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Windows.Controls.Ribbon/Microsoft/Windows/Controls/Ribbon/RibbonApplicationMenuItem.cs","lineNumber":75,"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 RibbonApplicationMenuItem || itemContainer is RibbonApplicationSplitMenuItem || itemContainer is RibbonSeparator || itemContainer is RibbonGallery)\n                    {\n                        return itemContainer as DependencyObject;\n                    }\n                    else\n                    {\n                        throw new InvalidOperationException(Microsoft.Windows.Controls.SR.Format(Microsoft.Windows.Controls.SR.InvalidApplicationMenuOrItemContainer, this.GetType().Name, itemContainer));\n                    }\n                }\n            }\n\n            return new RibbonApplicationMenuItem();\n        }\n\n        protected override bool ShouldApplyItemContainerStyle(DependencyObject container, object item)\n        {\n            if (container is RibbonApplicationSplitMenuItem ||\n                container is RibbonSeparator ||\n                container is RibbonGallery)\n            {\n                return false;\n            }\n            else\n            {\n                return base.ShouldApplyItemContainerStyle(container, item);","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Windows.Controls.Ribbon/Microsoft/Windows/Controls/Ribbon/RibbonApplicationMenuItem.cs#L57-L93","documentation":"RibbonApplicationMenuItem.GetContainerForItemOverride (shared validation used by the application-menu item hierarchy) only accepts existing containers of type RibbonApplicationMenuItem, RibbonApplicationSplitMenuItem, RibbonSeparator, or RibbonGallery; anything else throws InvalidOperationException (InvalidApplicationMenuOrItemContainer) with the type name and container. This keeps the ribbon application menu's item hierarchy homogeneous.","triggerScenarios":"Marking an arbitrary UIElement as the item container (IsItemItsOwnContainerOverride path) or overriding container generation in a derived RibbonApplicationMenuItem/RibbonApplicationSubMenu to return other containers (e.g. plain MenuItem).","commonSituations":"Custom ribbon menu item subclasses, styles that retemplate items into unsupported container types, or placing unsupported elements directly as children of the application menu.","solutions":["Use only RibbonApplicationMenuItem, RibbonApplicationSplitMenuItem, RibbonSeparator, or RibbonGallery as children/containers.","In subclass overrides of IsItemItsOwnContainerOverride, return false for unsupported types so the default container is generated.","Replace plain MenuItems/Buttons inside the ribbon application menu with Ribbon* equivalents."],"exampleFix":"// before\nmenu.Items.Add(new MenuItem { Header = \"Open\" });\n// after\nmenu.Items.Add(new RibbonApplicationMenuItem { Header = \"Open\" });","handlingStrategy":"type-guard","validationCode":"if (!(child is RibbonApplicationMenuItem || child is RibbonApplicationSplitMenuItem || child is RibbonSeparator || child is RibbonGallery)) child = new RibbonApplicationMenuItem();","typeGuard":"static bool IsRibbonAppMenuContainer(object c) => c is RibbonApplicationMenuItem || c is RibbonApplicationSplitMenuItem || c is RibbonSeparator || c is RibbonGallery;","tryCatchPattern":"try { items.Add(child); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"container\")) { items.Add(new RibbonApplicationMenuItem { DataContext = child }); }","preventionTips":["Add only Ribbon* items inside the ribbon application menu.","Convert existing MenuItem/ Button children to RibbonApplicationMenuItem.","In subclasses, never return foreign containers from container-generation overrides."],"tags":["wpf","ribbon","invalidoperation","itemcontainer"],"backgroundTag":"type-mismatch","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}