Закрыть контекстное меню при щелчке мышью за пределами C # - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть слушатель события щелчка правой кнопкой мыши, который срабатывает CreateContextMenu()

Функция выглядит следующим образом:

protected virtual ContextMenu CreateContextMenu()
    {
        ContextMenu contextMenu = new ContextMenu();

        MenuItem ClickHereMenuItem = new MenuItem();
        ClickHereMenuItem.Header = "Click Here";
        ClickHereMenuItem.Tag = contextMenu;
        ClickHereMenuItem.Click += ClickHere_Click;

        contextMenu.Items.Add(ClickHereMenuItem);

        contextMenu.Items.Add(new Separator());

        //Cancel Menu Item
        MenuItem cancelMenuItem = new MenuItem();
        cancelMenuItem.Header = "Cancel";
        cancelMenuItem.Tag = contextMenu;
        cancelMenuItem.Click += cancelMenuItem_Click;

        contextMenu.Items.Add(cancelMenuItem);
        return contextMenu; 
    }

Все работает, как задумано, но единственный способконтекстное меню закрывается, если вы выбираете пункт меню «Отмена» (который просто устанавливает contextMenu.IsOpen = false).Я также хочу, чтобы меню закрывалось, если пользователь щелкает за пределами элемента управления.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Создайте макет Canvas с высотой и шириной, занимающими размер окна вашего приложения, установите его видимость для скрытия, а затем добавьте контекстное меню как дочерний элемент к холсту. Теперь вы можете обработать событие MouseLeftButtonDown canvas и установить в нем contextMenu.IsOpen = false. Теперь этот холст занимает всю рабочую область вашего приложения, поэтому, когда бы вы ни щелкнули правой кнопкой мыши, вы могли открыть контекстное меню, а где бы пользователь ни щелкнул левой кнопкой мыши, контекстное меню можно закрыть.

Это способ, которым всплывающие окна, контекстные меню и т. Д. Работают в окнах и веб-приложениях.

Код выглядит примерно так:

Canvas canvas = new Canvas();
canvas.Height = Application.Height; //replace with ur app height
canvas.Width = Application.Width; //replace with ur app width
canvas.Child(ContextMenu); 
canvas.MouseLeftButtonDown += (s,e) => { contextMenu.IsOpen = false};

Это не фактический код, используйте его в качестве справки.

0 голосов
/ 17 ноября 2011

Попробуйте утилизировать метод, чтобы закрыть его

.Dispose()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...