public void OpenMenu(WindowsHost windowsHost, Point point) { if (expanded) { return; } // Вешаем на WindowsHost обработчик события MenuItem.ClickEvent, // чтобы ловить момент выбора пункта меню в одном из модальных всплывающих окошек // Дело в том, что эти окошки не являются дочерними элементами контрола Menu, // а напрямую являются дочерними элементами WindowsHost (т.к. именно он создаёт // окна). И событие выбора пункта меню из всплывающего окошка может быть поймано // в WindowsHost, но не в Menu. А нам нужно повесить обработчик, который закроет // все показанные попапы. EventManager.AddHandler(windowsHost, MenuItem.ClickEvent, windowsHostClick = (sender, args) => { CloseAllSubmenus( ); popup.Close( ); }, true); EventManager.AddHandler(windowsHost, MenuItem.Popup.ControlKeyPressedEvent, windowsHostControlKeyPressed = (sender, args) => { CloseAllSubmenus( ); // //ConsoleApplication.Instance.FocusManager.SetFocusScope(this); if (args.wVirtualKeyCode == VirtualKeys.Right) { ConsoleApplication.Instance.FocusManager.MoveFocusNext( ); } else if (args.wVirtualKeyCode == VirtualKeys.Left) { ConsoleApplication.Instance.FocusManager.MoveFocusPrev( ); } MenuItem focusedItem = ( MenuItem )this.Items.SingleOrDefault( item => item is MenuItem && item.HasFocus); focusedItem.Expand( ); }); if (null == popup) { popup = new MenuItem.Popup(this.Items, this.popupShadow, 0); popup.AddHandler(Window.ClosedEvent, new EventHandler(onPopupClosed)); } popup.X = point.X; popup.Y = point.Y; windowsHost.ShowModal(popup, true); expanded = true; this.windowsHost = windowsHost; }
public void OpenMenu( WindowsHost windowsHost, Point point ) { if ( expanded ) return; // Вешаем на WindowsHost обработчик события MenuItem.ClickEvent, // чтобы ловить момент выбора пункта меню в одном из модальных всплывающих окошек // Дело в том, что эти окошки не являются дочерними элементами контрола Menu, // а напрямую являются дочерними элементами WindowsHost (т.к. именно он создаёт // окна). И событие выбора пункта меню из всплывающего окошка может быть поймано // в WindowsHost, но не в Menu. А нам нужно повесить обработчик, который закроет // все показанные попапы. EventManager.AddHandler( windowsHost, MenuItem.ClickEvent, windowsHostClick = ( sender, args ) => { CloseAllSubmenus( ); popup.Close( ); }, true ); EventManager.AddHandler( windowsHost, MenuItem.Popup.ControlKeyPressedEvent, windowsHostControlKeyPressed = ( sender, args ) => { CloseAllSubmenus( ); // //ConsoleApplication.Instance.FocusManager.SetFocusScope(this); if ( args.wVirtualKeyCode == VirtualKeys.Right ) ConsoleApplication.Instance.FocusManager.MoveFocusNext( ); else if ( args.wVirtualKeyCode == VirtualKeys.Left ) ConsoleApplication.Instance.FocusManager.MoveFocusPrev( ); MenuItem focusedItem = ( MenuItem ) this.Items.SingleOrDefault( item => item is MenuItem && item.HasFocus ); focusedItem.Expand( ); } ); if ( null == popup ) { popup = new MenuItem.Popup( this.Items, this.popupShadow, 0 ); popup.AddHandler( Window.ClosedEvent, new EventHandler( onPopupClosed ) ); } popup.X = point.X; popup.Y = point.Y; windowsHost.ShowModal( popup, true ); expanded = true; this.windowsHost = windowsHost; }