未为 wpf 中相同类型的 UserControl 触发未加载事件

Posted

技术标签:

【中文标题】未为 wpf 中相同类型的 UserControl 触发未加载事件【英文标题】:Unloaded event not fired for same type of UserControl in wpf 【发布时间】:2013-08-08 12:34:11 【问题描述】:

我的 WPF 应用程序中有 2 个选项卡控件 (UserControl)。由于这两个选项卡控件都是基于后端数据动态创建的,所以我有两个相同类类型但对象不同的选项卡控件(通过检查两者的内存地址来确认,它们是不同的)

我遇到这种奇怪的情况,当我在相同类型的选项卡 (UserControl) 之间切换时,未触发 Unload 事件。但是,当我从/切换到不同类型的选项卡时,会调用 Unload 事件。

我想处理除 Unload 事件之外的其他事件吗?

请帮我解决这个问题。我被卡住了:(

【问题讨论】:

你想做什么?据微软称,Unloaded 事件Occurs when the element is removed from within an element tree of loaded elements. 【参考方案1】:

在花费更多时间和调查之后,我可以找到解决问题的方法。

出现此问题是因为 WPF 只是在每次我在相同类型的 Tab 控件之间切换时更改我的 UserControl 的 DataContext,并且由于 UsrControl 是相同类型,即使不同的对象,Unload 事件也没有被触发。

这个问题的解决方案是不处理Unload事件,而是处理UserControl的DataContextChanged事件。

谢谢大家的回答!!

干杯, 纳扬

【讨论】:

【参考方案2】:

为此,您需要订阅 OnSelectionChanged 事件,如下所示:

XAML:

<TabControl SelectionChanged="TabControl1_OnSelectionChanged">

代码隐藏:

private void TabControl1_OnSelectionChanged(object sender, SelectionChangedEventArgs e)

    //do whatever

【讨论】:

以上是关于未为 wpf 中相同类型的 UserControl 触发未加载事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在WPF中Usercontrol现实自定义事件

将UserControl绑定到ViewModel(Caliburn Micro WPF)

在单击按钮的Wpf中使用usercontrol

WPF中UserControl控件的关闭

在WPF中UserControl

WPF中UserControl中DesignWidth和Width的区别