Как сделать окно похожим на контекстное меню?

1

Я пытаюсь создать новое новое окно, как контекстное меню.

единственная проблема, с которой я сталкиваюсь: когда я нажимаю кнопки мыши за окном (ContextMenu), окно не закрывается. Я не могу найти событие, которое может поймать это действие.

это код, который я использую сейчас:

public partial class ContextMenu : Window
{
    public ContextMenu()
    {
        InitializeComponent();
        this.ShowInTaskbar = false;
        this.Deactivated += new EventHandler(ContextMenu_Deactivated);
    }

    void ContextMenu_Deactivated(object sender, EventArgs e)
    {
        this.Hide();
    }

    protected override void OnDeactivated(EventArgs e)
    {
        base.OnDeactivated(e);
        this.Hide();
    }

    protected override void OnMouseDown(MouseButtonEventArgs e)
    {
        base.OnMouseDown(e);
        this.Hide();            
    }

    protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
    {
        base.OnKeyDown(e);
        this.Hide();           
    }

    protected override void OnLostFocus(RoutedEventArgs e)
    {
        base.OnLostFocus(e);
        this.Hide();            
    }

}

non из вышеперечисленных функций улавливает нажатие мыши за окном (ContextMenu).

Я попытался использовать http://www.hardcodet.net/taskbar, но примеры, которые я нашел, не являются чем-то вроде того, что я ищу.

  • 0
    У вас в форме KeyPreview установлено значение True?
Теги:
wpf
events

3 ответа

0

Похоже, вам нужна обработка глобальных мышек.

Вот хорошее решение этой проблемы

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

0

Я считаю, что вы захотите использовать Mouse.Capture, чтобы обнаружить щелчок от вашего окна.

Этот вопрос + ответ может привести вас в правильном направлении:

Как использовать CaptureMouse или Mouse.Capture в моем приложении WPF для С#?

0

Элемент управления не может обнаружить щелчки мыши, которые находятся за пределами их ограничивающего Rectangle. Тем не менее, Window может обнаружить щелчок мыши в любом месте своей границы. Поэтому все, что вам нужно сделать, это обработать событие PreviewMouseDown в файле MainWindow.xaml.cs а затем передать сообщение соответствующему элементу управления каждый раз, когда событие будет поднято.

  • 0
    я хочу, чтобы приложение знало, когда мышь была нажата за пределами окна, чтобы оно закрывало окно (как в контекстном меню). Вы говорите, что я должен нажать кнопку мыши в другом окне приложения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню