xaml c# 检查是否在 xaml 中订阅了事件

xaml c# checking if event is subscribed in xaml

我已经完成了这背后的研究,但代码并没有完全满足我的要求。基本上我已经创建了一个工具栏,它只显示在父 window (xaml) 中调用的事件的图标。因此,例如,如果我调用了 New_Click 事件,则新按钮会出现并隐藏所有其他按钮。

    //NEW
    public event btnNew_ClickedEventHandler btnNew_Click;
    public delegate void btnNew_ClickedEventHandler(object sender);
    private void btnNew_MouseUp(object sender, MouseButtonEventArgs e)
    {
        if (btnNew_Click != null) {
            btnNew_Click(this);
            EnableIcons();
        }
    }

这就是声明事件的代码。

        //Check if Icon should be shown
        if (btnNew_Click != null & iconName == "New") {
            toolIcon.MouseUp += btnNew_MouseUp;
        }

这将使用图标注册事件。现在对于 btnNew_Click 我是空值,即使我在第一个代码块中正确声明了它......知道为什么吗?

如果一个事件有 0 个订阅者,该事件将保持为空。一旦您为 "btnNew_Click" 订阅事件处理程序,它将不再为空。您已经声明了您的事件并将其事件处理程序类型设置为您的委托,现在您需要订阅该事件。您只需要在触发事件之前检查该事件是否为空。因为,如果没有订阅者,就没有理由触发事件。看起来您只需要从此处删除空检查:

    //Check if Icon should be shown
    if (iconName == "New") {
        toolIcon.MouseUp += btnNew_MouseUp;
    }