我将Winforms程序转换为WPF程序时遇到了另一个问题。在我的第一个程序中,我打开了一个较小的窗口以允许用户调整某些数据,然后当它关闭时,另一个表单再次被新数据激活。
我使用form2.ShowDialog();
打开表单,该表单会自动在Winforms中停用父表单。这样,当我关闭form2时,父窗体被激活,我能够使用事件处理程序form1_Activated
重新加载并重新初始化一些设置。
但是,现在当我尝试使用WPF执行相同操作时,我仍然可以使用form2.ShowDialog();
打开form2,但是当我关闭表单时,它不会注册form1_Activated
事件处理程序。相反,为了重新加载设置,我必须单击另一个窗口,然后返回我的程序以注册form1_Activated
事件处理程序。
我只是做错了什么,或者我是否应该在WPF中使用另一个事件处理程序来实现我在Winforms中能够做的事情?
答案 0 :(得分:1)
调用ShowDialog()会导致对话框顶部以模态模式显示,因此我不明白为什么在对话框关闭后需要事件处理程序来处理结果。请记住,您也可以访问DialogBox中的公共变量。如果我理解你的问题,这应该按照你的要求行事:
主窗口:
My_DialogBox dlg = new My_DialogBox();
dlg.Owner = this;
dlg.MyPublicVariable = ''; //some value that you might need to pass to the dialog
dlg.ShowDialog(); //exection of MainWindow is suspended until dialog box is closed
if (dlg.DialogResult == true)
{
//dlg.MyPublicVariable is still accessible
//call whatever routines you need in order to refresh the main form's data
}
对话框:
private void OK_Button_Click(object sender, RoutedEventArgs e)
{
MyPublic variable = something; //accessible after the dialog has closed.
this.DialogResult = true;
}
private void Cancel_Button_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}
MSDN在对话框上的写入非常好。可能有一些提示可能会对您有所帮助: http://msdn.microsoft.com/en-us/library/aa969773.aspx
祝你好运!