C# 在wpf中,是否有方法在卸载控件之前执行代码。。。?比如一个卸货活动?

C# 在wpf中,是否有方法在卸载控件之前执行代码。。。?比如一个卸货活动?,c#,wpf,wpf-controls,C#,Wpf,Wpf Controls,我需要在卸载wpf用户控件之前执行代码,如果满足某些条件,则取消卸载,并在ui中保持控件在当前状态下打开 我有什么办法可以做到这一点吗?我看不到任何类似卸载事件的东西? 谢谢,System.Windows.Controls.Control上有一个事件,但我不知道如何停止卸载该控件。卸载的将在从WPF可视树中删除该控件时触发。据我所知,没有像Windows窗体中那样的“卸载”事件。但是,“unload”并不意味着控件被破坏,只意味着它被从可视化树中删除 在代码中的单独位置保留对该控件的引用,以及关

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

我有什么办法可以做到这一点吗?我看不到任何类似卸载事件的东西?
谢谢,

System.Windows.Controls.Control上有一个事件,但我不知道如何停止卸载该控件。

卸载的
将在从WPF可视树中删除该控件时触发。据我所知,没有像Windows窗体中那样的“卸载”事件。但是,“unload”并不意味着控件被破坏,只意味着它被从可视化树中删除

在代码中的单独位置保留对该控件的引用,以及关于其父控件的少量元数据。您可能可以通过在
初始化的
事件处理程序中存储对
父属性的引用来收集元数据

然后,当调用
unload
时,在
unload
事件处理程序中进行测试,如果满足条件,则将控件重新插入逻辑树。
ContentControl
类有一个显式的
AddChild
受保护的方法,您可以调用该方法

可能有一些副作用需要注意;根据文档,当在操作系统级别更改主题时,当WPF可视化树重新构建自身时,会调用
unload

private void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
     if (ConditionsMet) { e.Handled = true; }
}

如果ConditionsMet,则卸载的事件将设置为true,此后将控件保留在VisualTree中-您的控件不卸载

是..我知道卸载的事件,但根据某些条件,我需要停止卸载它…它必须是UserControl吗?或者您可以使用一个模式对话框,如果某些条件不满足,它不会关闭?您的用例是什么?听起来您需要类似于Window.Closing的功能,这与取消FrameworkElement.Unload事件有很大不同。当一个元素被卸载时,围绕父元素和同级元素的布局可能会发生很多事情。我有一个类似的问题,以防万一你们可以帮助我,这在我的测试中不起作用。e、 已处理=正确;似乎被忽略了。