Я пытаюсь создать новое новое окно, как контекстное меню.
единственная проблема, с которой я сталкиваюсь: когда я нажимаю кнопки мыши за окном (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, но примеры, которые я нашел, не являются чем-то вроде того, что я ищу.
Похоже, вам нужна обработка глобальных мышек.
Вот хорошее решение этой проблемы
http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
Я считаю, что вы захотите использовать Mouse.Capture, чтобы обнаружить щелчок от вашего окна.
Этот вопрос + ответ может привести вас в правильном направлении:
Как использовать CaptureMouse или Mouse.Capture в моем приложении WPF для С#?
Элемент управления не может обнаружить щелчки мыши, которые находятся за пределами их ограничивающего Rectangle
. Тем не менее, Window
может обнаружить щелчок мыши в любом месте своей границы. Поэтому все, что вам нужно сделать, это обработать событие PreviewMouseDown
в файле MainWindow.xaml.cs
а затем передать сообщение соответствующему элементу управления каждый раз, когда событие будет поднято.