我需要在WPF用户控件卸载之前执行代码,并在满足某些条件时取消卸载,使控件在UI中保持打开状态...
有什么办法可以实现吗?我没找到类似于卸载事件的东西?
我需要在WPF用户控件卸载之前执行代码,并在满足某些条件时取消卸载,使控件在UI中保持打开状态...
有什么办法可以实现吗?我没找到类似于卸载事件的东西?
Unloaded
事件在WPF可视化树中移除控件时触发。据我所知,与Windows Forms不同的是,WPF中没有"Unloading"事件。但是,"Unloaded"并不意味着控件被销毁,只是从可视化树中移除。
在代码中将控件及其父控件的一些元数据保存在单独的位置,并通过在Initialized
事件处理程序中存储对Parent
属性的引用来收集这些元数据。
然后,在调用Unloaded
时,在Unloaded
事件处理程序中进行测试,如果满足条件,则重新将控件插入逻辑树中。 ContentControl
类有一个显式的AddChild
受保护方法,您可以调用该方法。
可能会有一些副作用需要注意; 根据文档,在操作系统级别更改主题或WPF可视化树重新构建时,将调用Unloaded
事件。
在System.Windows.Controls.Control上有一个Unloaded事件,但我不知道如何优雅地停止使用它卸载控件。
private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
if (ConditionsMet) { e.Handled = true; }
}