Example #1
0
        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;
        }
Example #2
0
        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;
        }