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;
}
我已经完成了这背后的研究,但代码并没有完全满足我的要求。基本上我已经创建了一个工具栏,它只显示在父 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;
}