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

时间:2015-02-13 19:23:58

标签: c# wpf xaml events

我已经完成了这项研究,但代码并没有完全符合我的要求。基本上我已经创建了一个ToolBar,它只显示在父窗口(xaml)中调用的事件的图标。因此,例如,如果我调用了New_Click事件,那么New Button会隐藏所有其他事件。

    //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我是null值,即使我已经在第一个代码块中正确声明了......任何想法为什么?

1 个答案:

答案 0 :(得分:0)

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

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