C# WPF控制处理

C# WPF控制处理,c#,wpf,user-controls,dispose,C#,Wpf,User Controls,Dispose,在WinForms中,对于所有控件,都有.OnDisposed覆盖、Disposed事件和IsDisposed属性 WPF似乎没有对等物 如何在WPF应用程序中侦听对UserControl的处理 更加清晰;我需要知道控件何时被移除。原因是,对于某些控件,我希望保留对该控件的静态引用,以便更容易地访问它,并且当该控件不再在作用域中时,我需要将该引用设置为null 更清楚地说: public class Foo : UserControl{ private static Foo _Insta

在WinForms中,对于所有控件,都有
.OnDisposed
覆盖、
Disposed
事件和
IsDisposed
属性

WPF似乎没有对等物

如何在WPF应用程序中侦听对
UserControl
的处理

更加清晰;我需要知道控件何时被移除。原因是,对于某些控件,我希望保留对该控件的静态引用,以便更容易地访问它,并且当该控件不再在作用域中时,我需要将该引用设置为null

更清楚地说:

public class Foo : UserControl{
    private static Foo _Instance;
    //For ease of access. I do not want to have to call Control.Control.Control.Control.FooVar.DoSomething() when I can call Foo.Instance.DoSomething()
    public static Foo Instance { get { return Foo._Instance ?? new Foo() } }

    public Foo(){
        this.InitializeComponents();
        /*Other Initialization Stuff*/
        Foo._Instance = this; /*<---- This needs to be set to null when Foo is closed/disposed/removed/out of scope etc.*/
    }        
}
公共类Foo:UserControl{
私有静态Foo_实例;
//为了便于访问,当我可以调用Foo.Instance.DoSomething()时,我不希望必须调用Control.Control.Control.Control.FooVar.DoSomething()
公共静态Foo实例{get{return Foo.\u实例??new Foo()}
公共食物({
this.InitializeComponents();
/*其他初始化内容*/

Foo._Instance=this;/*如果希望静态引用对象,但不将它们保留在内存中,则始终可以选择

然后在你的XAML中

<UserControl ...
             Unloaded="OnUnloaded">


我非常确定WPF对象与GDI+对象不同,它们不使用非托管资源,因此不需要实现IDisposable。您想知道“处置”吗在垃圾收集和释放资源的意义上,或者你只是想知道它什么时候被删除?@RonBeyer:它什么时候被删除。但是如果没有Foo,就没有私有的静态Foo_实例;。你为什么需要将其设置为null?如果为null,那么你为什么要创建一个新的Foo?责怪你显然错过了构造函数中我设置的位置Foo.\u Instance=this.1一件事-静态WeakReference不是默认为null吗?调用.TryGetTarget函数或.SetTarget方法不会引发null引用异常吗?
// Ensure the instance is cleared when unloading
public void OnUnloaded(object sender, RoutedEventArgs args)
{
    _instance.SetTarget(null);
}
<UserControl ...
             Unloaded="OnUnloaded">