是否可以检查用户何时在模态窗口外单击?我想以某种方式绕过模态逻辑,因为如果窗口没有显示为模态,它将不会显示在活动窗口的顶部,而且,目前,这是正确显示它的唯一方法。我还没有找到合适的方法(因为“停用”事件将不再被触发..)
答案 0 :(得分:12)
即使它是一个模态窗口(用ShowDialog()
调用显示),也可以在窗口的类中添加一些偶数处理程序,并检查窗口外的鼠标点击,如下所示:
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);
}
这对我来说,在困难的环境中完成了这项工作:混合MFC,应用程序的WindowsForms猛犸象 - 没有互操作,没有其他复杂的东西。希望它可以帮助其他人面对这种奇怪的行为。
答案 1 :(得分:2)
一种方法是在主应用程序上连接事件处理程序,并在打开该窗口时对其进行响应:
EventManager.RegisterClassHandler(typeof(Window), Mouse.MouseDownEvent, new MouseButtonEventHandler(OnMousepDown), true);
或
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
}