C# WPF控制处理
在WinForms中,对于所有控件,都有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
.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">