[英]How to close a window when user clicks on mainwindow in wpf application
我有一個WPF應用程序,它將一個窗口顯示為DialogBox。 當我在應用程序中的MainWindow上單擊任意位置時,我想關閉此對話框。
我在這里添加一個示例示例來說明
應用程序的主窗口
<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(); } } }
謝謝
您可以使用DialogBox窗口的Deactivated事件來執行此操作
像這樣的東西
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調用DialogBox,則背景窗口(即MainWindow)將被禁用,直到您關閉DialogBox,並且它不會獲得任何點擊,因此除非調用DialogBox,否則您將無法實現所需的功能使用不會鎖定背景窗口的Show方法,然后可以在MainWindow GotFocus觸發時關閉DialogBox。
您必須將第二個窗口聲明為全局變量,然后調用.Hide()和.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。 如果您確實要關閉窗口,則必須使用.Close()命令,並每次都調用窗口的構造函數。
首先將您的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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.