You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过子用户控件的Closed路由事件控制父窗体其他控件显隐

方案1:直接订阅头部控件的Closed事件

如果你的MainHeaderView直接在父窗体的XAML中定义,给控件添加x:Name标识后直接订阅即可:

  1. 父窗体XAML示例:
<local:MainHeaderView x:Name="GlobalHeader" />
<!-- 你的两个业务控件 -->
<local:MineControl x:Name="MineView" />
<local:MessageControl x:Name="MessageView" Visibility="Collapsed" />
  1. 父窗体代码后置添加订阅逻辑:
public 父窗体类名()
{
    InitializeComponent();
    // 订阅头部关闭事件
    GlobalHeader.Closed += GlobalHeader_Closed;
}

private void GlobalHeader_Closed(object sender, RoutedEventArgs e)
{
    MineView.Visibility = Visibility.Collapsed;
    MessageView.Visibility = Visibility.Visible;
    // 若不需要事件继续向上冒泡可标记已处理
    e.Handled = true;
}

方案2:监听冒泡路由事件(适合头部嵌在多层子控件的场景)

因为你定义的ClosedEvent是冒泡策略的路由事件,即使MainHeaderView嵌在mainc UserControl内部,父窗体不需要获取头部控件实例,直接监听路由事件即可:

public 父窗体类名()
{
    InitializeComponent();
    // 直接监听所有冒泡到当前窗体的MainHeaderView.Closed事件
    this.AddHandler(MainHeaderView.ClosedEvent, new RoutedEventHandler(GlobalHeader_Closed));
}

private void GlobalHeader_Closed(object sender, RoutedEventArgs e)
{
    MineView.Visibility = Visibility.Collapsed;
    MessageView.Visibility = Visibility.Visible;
    e.Handled = true;
}

注意事项

如果你已经在mine控件中订阅了该事件,需要确保mine控件的事件处理方法中没有设置e.Handled = true,否则事件会被中断冒泡,父窗体无法收到触发通知。

内容的提问来源于stack exchange,提问作者vahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:36:03