当用户在 wpf 应用程序中单击主窗口时如何关闭窗口
本文关键字:窗口 何关闭 单击 用户 wpf 应用程序 | 更新日期: 2023-09-27 18:31:59
>我有一个WPF应用程序,它将一个窗口显示为对话框。我想在应用程序中单击主窗口上的任意位置时关闭此对话框。
在这里,我添加一个示例来解释
应用程序主窗口
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Open new Window" Click="Button_Click" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Window>
主窗口背后的代码
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 temp_Window = new Window1();
temp_Window.ShowDialog();
}
}
}
我尝试关闭的儿童窗口
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="Window1" Height="300" Width="300" Deactivated="Window_Deactivated">
<Grid>
<TextBlock>New Window</TextBlock>
</Grid>
</Window>
此子窗口背后的代码
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Deactivated(object sender, EventArgs e)
{
Close();
}
}
}
谢谢
您可以使用
对话框窗口的"已停用"事件执行此操作
像这样的东西
XAML
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="Window1" Height="200" Width="200" WindowStartupLocation="CenterScreen"
Deactivated="Window_Deactivated">
<Grid>
</Grid>
</Window>
法典
private void Window_Deactivated(object sender, EventArgs e)
{
this.Close();
}
如果使用 ShowDialog 调用对话框,背景窗口(即 MainWindow)将被禁用,直到您关闭对话框并且它不会得到任何点击,因此除非您使用 Show 方法调用不会锁定背景窗口的 DialogBox,否则您无法实现所需的内容,然后您可以在 MainWindow GotFocus 触发时关闭对话框。
首先将您的temp_window
声明为归档而不是局部变量:
private Window1 temp_Window;
当您打开新窗口时,不要将其作为对话框打开,否则,将不会使用 Show()
而不是ShowDialog()
来处理 mainWindow 上的事件:
private void Button_Click(object sender, RoutedEventArgs e)
{
temp_Window = new Window1();
temp_Window.Show();
}
在主窗口处理mouseDown
事件:
MouseDown="MainWindow_OnMouseDown"
并关闭处理程序中的tempWindow
private void MainWindow_OnMouseDown(object sender, MouseButtonEventArgs e)
{
tempWindow .Close();
}
您必须将第二个窗口声明为全局变量并调用 .隐藏() 和 .Show() 命令是这样的:
主窗口:
public partial class MainWindow : Form
{
private Dialog m_Dialog;
public MainWindow()
{
InitializeComponent();
m_Dialog = new Dialog();
this.Click += closeDialog;
}
private void closeDialog(object sender, EventArgs e)
{
m_Dialog.Hide();
}
private void button1_Click(object sender, EventArgs e)
{
m_Dialog.Show();
}
}
它工作得很好。
已更新:
下面是 WPF 的相同代码。我以前在WinForms中做过:
public partial class MainWindow : Window
{
private Dialog m_Dialog;
public MainWindow()
{
InitializeComponent();
m_Dialog = new Dialog();
this.MouseDoubleClick += onCloseDialog;
}
private void onCloseDialog(object sender, MouseButtonEventArgs e)
{
m_Dialog.Hide();
}
private void onButton(object sender, RoutedEventArgs e)
{
m_Dialog.Show();
}
}
当然,您可以使用其他事件而不是MouseDoubleClick。如果确实要关闭窗口,则必须使用 .关闭() 命令并每次调用窗口的构造函数。