2013-07-03 36 views
2

我在将我的Winforms程序转换为WPF程序时遇到了另一个问题。在我的第一个程序中,我打开了一个较小的窗口以允许用户调整某些数据,然后当它关闭时,另一个窗体再次用新数据激活。ShowDialog在WPF中的处理方式与Winforms不同吗?

我用form2.ShowDialog();来打开窗体,它自动使Winform中的父窗体停用。这样,当我关闭form2时,父表单被激活,并且我能够使用事件处理程序form1_Activated重新加载并成功重新初始化一些设置。但是,现在当我试图用WPF做同样的事情时,我仍然可以使用form2.ShowDialog();打开form2,但是当我关闭表单时,它不会注册form1_Activated事件处理程序。相反,为了重新加载设置,我必须点击另一个窗口,然后返回我的程序来注册form1_Activated事件处理程序。我是否做错了什么,或者是否有另一个事件处理程序,我应该在WPF中使用它来实现我在Winforms中可以做到的同样的事情?

+4

窗口激活在WPF中非常片状。再次,你已经在Winforms中做了错误的方法。在ShowDialog()调用之后移动你的代码*。不要忘记注意它的回报价值。 –

+0

@HansPassant那么是否有另一种方法可以用来在第二个窗口关闭后在第一个窗口中触发事件,就像我能够在Winforms中执行的那样? – VarnerBeast14

+3

您可以在ShowDialog()调用后引发您自己的事件。请注意这个荒谬的地方,一个班级听自己的事件是没有意义的。只需直接调用事件处理程序。 –

回答

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

祝你好运!

相关问题