WPF窗口关闭事件用法

问题描述:

我有Window类(例如public partial class Foo : Window),当我创建窗口时,我注册了Closed事件。WPF窗口关闭事件用法

foo = new Foo(); 
foo.Closed += FooClosed; 


public void FooClosed(object sender, System.EventArgs e) 
{ 
} 

当有人按下foo窗口我称之为this.Close()内的按钮,但我FooClosed似乎并没有被调用。

我错误地注册了该活动吗?

更新

顺便说一句,所有我想做到的是知道foo已经关闭,所以我可以设置参考回null。有没有更好的方法来实现这一目标?

+0

它看起来不错,但表现出多一点的上下文。在哪个类是FooClosed()以及其他代码被调用的地方? – 2012-04-05 18:01:57

+0

显然代码是正确的! – 2012-04-05 18:04:35

+0

'Foo:Window'不会重写任何'Window'事件,或者有一个隐式的析构函数/终结器,是吗? – Alain 2012-04-05 18:20:11

问题得到回答,前几天检查Execute code when a WPF closes

你可能有一些事情与你的代码,因为这工作对我蛮好。

MainWindow.xaml.cs

namespace WpfApplication1 
{ 

    public partial class MainWindow : Window 
    { 
     private Foo foo; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      foo = new Foo(); 
      foo.Closed += FooClosed; 
      foo.Show(); 
     } 

     public void FooClosed(object sender, System.EventArgs e) 
     { 
      //This gets fired off 
      foo = null; 
     } 

    } 
} 

Foo.xaml

<Window x:Class="WpfApplication1.Foo" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Foo" Height="300" Width="300"> 
    <Grid> 
     <Button Click="Button_Click">Close</Button> 
    </Grid> 
</Window> 

Foo.xaml.cs

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for Foo.xaml 
    /// </summary> 
    public partial class Foo : Window 
    { 
     public Foo() 
     { 
      InitializeComponent(); 
     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      this.Close(); 
     } 
    } 
} 
+0

我现在就试试。 – Ternary 2012-04-05 18:07:11

+1

我正在做的事情和你提供的那个链接之间的区别是我想处理一个从窗口外部被关闭的窗口(即我没有这样做.closed)我从父窗口处理它。 – Ternary 2012-04-05 18:08:15

+0

@Ternary - 您确定窗口“foo”在您的映射事件有机会被调用之前没有被破坏?也许你应该钩住Window.Closing()来查看是否是这种情况。 – Alain 2012-04-05 18:09:36