如何通过事件处理程序传递发件人

时间:2012-10-19 14:33:21

标签: c# .net wpf events xaml

我正在使用http://wpfmdi.codeplex.com/库来处理我的WPF应用程序中的MDI。

我有一个包含子容器的Canvas,后者又包含许多小窗口。我希望在其中一个小窗口关闭时执行操作,所以我尝试执行以下操作:

MdiChild child = new MdiChild();
child.Closing += new RoutedEventHandler(DatabaseTableWindow_Closing); 

private void DatabaseTableWindow_Closing(object sender, RoutedEventArgs e)
        {
            object s = e.Source;
        }

在窗口关闭时成功输入方法时,e.Source为空。我也检查了sender,这也是空的。我想要的是找出触发事件的窗口的方法。

2 个答案:

答案 0 :(得分:2)

如果sendernull,那么这听起来像是您正在使用的MDI框架中的疏忽/错误。由于您拥有源,因此您可以修复它:找到引发Closing事件的位置,并添加this作为发件人。在您处理事件时,这应该为您提供MdiChild的参考。

答案 1 :(得分:2)

您可以使用LINQ来解决问题:

child.Closing += (o,e) => { DatabaseTableWindow_Closing(this, e); };

修改:实际上,在这种情况下,你不应该使用"这个",但是" child" (这将指向你的MdiChild):

MdiChild child = new MdiChild();
child.Closing += (o,e) => { DatabaseTableWindow_Closing(child, e); };