Is it possible to check when the user has clicked outside a modal window? I\'d like to somehow circumvent the modal logic because if the window isn\'t displayed as modal, it wil
Even if it's a modal window (displayed with ShowDialog()
calls), one can add some even handlers to the window's class and make it check for the mouse clicks outside the window like this:
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (posX < 0 || posX > this.Width || posY < 0 || posY > this.Height)
this.Close();
}
private void Window_MouseMove(object sender, MouseEventArgs e)
{
Point p = e.GetPosition(this);
posX = p.X; // private double posX is a class member
posY = p.Y; // private double posY is a class member
}
private void Window_Activated(object sender, EventArgs e)
{
System.Windows.Input.Mouse.Capture(this, System.Windows.Input.CaptureMode.SubTree);
}
This did the job for me, in a difficult context: mingled MFC, WindowsForms mammoth of an app - no interop, no other complicated stuff. Hope it helps others facing this odd behavior.
Well one way is to hook up the event handler on your main app and respond to it when you have that window open:
EventManager.RegisterClassHandler(typeof(Window), Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);
or
EventManager.RegisterClassHandler(typeof(yourAppClassName), Mouse.PreviewMouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);
//this is just a sample..
private void OnMousepDown(object sender, MouseButtonEventArgs e)
{
if (thatWindowThatYourTalkingAbout.IsOpen)
..do something
}