检查是否从ParentWindow为UserControl声明了EventSetter

时间:2015-01-08 06:54:01

标签: c# .net wpf vb.net routed-events

我正在为我的项目制作ToolBar菜单UserControl。 ToolBar将根据它所经历的每种情况拥有n个按钮。因此,例如在某些窗口工具栏中将有新的,编辑,删除按钮,但在其他窗口工具栏中可能有上传,下载和打印。这是一个简单的例子,它比这更复杂。

这是我到目前为止所拥有的: 在UserControl(ToolBar)中

NEW Button
    Public Event btnNew_Click As btnNew_ClickedEventHandler
    Public Delegate Sub btnNew_ClickedEventHandler(sender As Object)
    Private Sub btnNew_MouseUp(sender As Object, e As MouseButtonEventArgs)
        RaiseEvent btnNew_Click(Me)
    End Sub

此代码将通过xaml中的Window显示此事件

<toolbar btnNew_Click="Code_for_New_Record"/>

到目前为止一切顺利(一切正常)。但我想检查我的事件是否从MainWindow附加,如果不是,则隐藏它。

例如,如果我有更新,删除,打印等按钮。而MainWindow的程序员只编写了New Button,只显示了新的Button。

问题: 如何判断事件是附加还是被调用?我想要一些代码

如果myEvent IsNot附加,那么 button.visibility =折叠 结束如果

提前感谢您的所有帮助!

1 个答案:

答案 0 :(得分:0)

要检查包含工具栏控件的窗口是否已注册到btnNew_Click事件(意味着是否附加了事件处理程序),您只需检查null

if (btnNew_Click == null)
    // event not attached
else
    // event attached

请注意,这是C#代码,在VB中,它看起来类似于以下内容(现在无法测试):

If btnNew_Click Is Nothing Then
    ' Event not attached
Else
    ' event attached
End If

问题是何时调用该代码。如果要完全隐藏相应的工具栏按钮,可能需要执行null - 在UserControl的OnLoaded事件中进行检查,并将按钮的Visibility设置为VisibleCollapsed。但是,您可以随时执行此操作,即使应用程序已在运行(我在执行null时实现了类似的方案 - 在按钮的MouseOver事件中检查并更改了鼠标光标(到如果没有附加事件,则表示无法点击该按钮。