// The above mentioned solution for Dev10 bug# 908460 needed another supporting change. // The base class for RibbonApplicationMenu viz. MenuBase woudn't wait for the // CloseSubmenuTimer to elapse but instead forcibly closed the first Popup as soon as // the second one was about to show. And this happened when the IsSubmenuOpen property // on the first Popup was being turned off. So in order to counter this behavior, we // now coerce the IsSubenuOpen property for top level RibbonApplicationMenuItems and // RibbonApplicationSplitMenuItems whenever the timer is running and the current // selection has moved to another MenuItem with a submenu. private static object CoerceIsSubmenuOpen(DependencyObject d, object baseValue) { RibbonApplicationSplitMenuItem menuItem = (RibbonApplicationSplitMenuItem)d; if (menuItem.Level == RibbonApplicationMenuItemLevel.Top) { return RibbonHelper.CoerceIsSubmenuOpenForTopLevelItem(menuItem, menuItem.ParentItemsControl, (bool)baseValue); } return baseValue; }