在wpf中,有没有办法在卸载控件之前执行代码...?比如可能是卸货事件?

时间:2010-07-13 20:38:33

标签: c# wpf wpf-controls

我需要在卸载wpf用户控件之前执行代码,如果满足某些条件则取消卸载并保持控件在ui中保持当前状态...

有什么方法可以做到这一点吗?我看不到像卸载事件一样的东西? 谢谢,

3 个答案:

答案 0 :(得分:4)

从WPF可视化树中删除控件时会触发

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中 - 您的控件不会卸载