我创建了一个FormManager类,它显示了一个名为MyFormView的自定义表单。 FormManager订阅MyFormView抛出的事件。
这里是在MyFormView上触发事件的代码端:
public delegate void MyFormClickEventHandler(string name);
public event MyFormClickEventHandler myFormEventHandler;
private void MyFormClick(object sender, RoutedEventArgs e)
{
if (this.myFormEventHandler != null)
{
this.myFormEventHandler(this.Name.Text);
}
}
FormManager创建MyFormView对话框并订阅UserControl事件:
public delegate void MyFormEventHandler(string info);
public static event MyFormEventHandler MyFormEvent;
myFormView = new Window
{
Title = "my form!",
Height = 300,
Width = 980,
Content = new MyFormView()
};
((MyFormView)myFormView.Content).myFormEventHandler += this.GetDataFromForm;
这里显示我使用的对话框:
myFormView.Show();
代码工作正常,事件在用户控件( MyFormView )中触发,并在实际事件处理程序中捕获( GetDataFromForm )。
问题在于,如果我更改了这一行的最后一行:
myFormView.ShowDialog();
这里的问题是该事件不会被触发,因为在MyFormClick myFormEventHandler null 。
Show()和 ShowDialog()之间的区别是什么使 FormManager 不订阅来自的事件myFormview ?这可以解决吗?
答案 0 :(得分:0)
问题是我在订阅活动之前展示了对话框。
只使用Show()不是问题,但使用ShowDialog()它永远不会订阅该事件。
这里是代码:
myFormView = new Window
{
Title = "my form!",
Height = 300,
Width = 980,
Content = new MyFormView()
};
((MyFormView)myFormView.Content).myFormEventHandler += this.GetDataFromForm;
myFormView.Show();
//or myFormViewShowDialog();
实际上,Arie是在评论中提供解决方案的人,但没有发布。所以我为ppl做了可能有同样问题。