我需要在卸载wpf用户控件之前执行代码,如果满足某些条件则取消卸载并保持控件在ui中保持当前状态...
有什么方法可以做到这一点吗?我看不到像卸载事件一样的东西? 谢谢,
答案 0 :(得分:4)
Unloaded
。据我所知,没有“卸载”事件,因为我认为,在Windows窗体中。但是,“Unloaded”并不意味着控件被销毁,只是它被从可视树中删除。
在代码中的单独位置保留对控件的引用,以及有关其父控件的一些元数据。您可以通过在Parent
事件处理程序中存储对Initialized
属性的引用来收集该元数据。
然后,当调用Unloaded
时,在Unloaded
事件处理程序中进行测试,如果满足条件,则将控件重新插入逻辑树。 ContentControl
类有一个可以调用的显式AddChild
受保护方法。
可能需要注意一些副作用;根据文档,当操作系统级别更改主题时,当WPF可视化树重新构建时,将调用Unloaded
。
答案 1 :(得分:0)
System.Windows.Controls.Control上有一个Unloaded事件,但我不知道用它来停止卸载控件的优雅方法。
答案 2 :(得分:-1)
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
if (ConditionsMet) { e.Handled = true; }
}
如果ConditionMet将Unloaded事件设置为true,从而保持您的控件在VisualTree中 - 您的控件不会卸载