我有Sample Wpf应用程序,我在其中从全屏启动的主窗口中启动一个窗口。每当用户在启动的子窗口之外单击时,我都想显示一个消息框。我实际上是指这篇帖子how to close a WPF Dialog Window when the user clicks outside it。
但是问题是在这种情况下,“停用”仅在这种情况下关闭子窗口时才会引发。请帮助我如何实现这一目标。 编辑:注意,我想显示对话框,因为我希望子窗口成为阻止窗口。
private void Button_Click(object sender, RoutedEventArgs e)
{
Window w = new Window();
w.Height = 990;
w.Width = 1840;
w.MaxHeight = 990;
w.Width = 1840;
w.WindowStartupLocation = WindowStartupLocation.Manual;
w.Top = this.Height - w.Height;
w.Left = this.Width - w.Width;
w.Deactivated += W_Deactivated;
w.ShowDialog();
}
private void W_Deactivated(object sender, EventArgs e)
{
MessageBox.Show("You clicked out");
}
答案 0 :(得分:1)
这里,我正在使用System.Windows.Input
InputManager PreProcessInput事件来预览在定义的元素({{1 }})。
然后,用Window
计算鼠标左键的位置。
如果单击是在元素element.RestoreBounds.Contains(element.PointToScreen(e.GetPosition(element)))
外部生成的,则窗口会显示一条消息,然后关闭(或退出应用程序)。
使用e.StagingItem.Input激活鼠标捕获,并使用UIElement.CaptureMouse()在Bounds
事件上释放鼠标。
它与使用UIElement.ReleaseMouseCapture大致相同。
请注意,您可以单击Window控件,但是如果使用其MouseDown
拖动Window
,则不会引发TitleBar
事件(默认情况下,它会被吃掉)。
如果这是一个问题,请创建一个逻辑来检测鼠标事件是否在该区域中生成,并在MouseUp
完成后恢复捕获。
MouseDown
答案 1 :(得分:0)
使用
w.Show();
由于较早的是模态对话框(Showdialog()
),因此除非将其关闭,否则无法继续操作。