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

本文关键字:声明 EventSetter UserControl 是否 ParentWindow 检查 | 更新日期: 2023-09-27 18:36:37

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

这是我到目前为止所拥有的:在用户控件(工具栏)中

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 中的窗口中可见

<toolbar btnNew_Click="Code_for_New_Record"/>

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

例如,如果我有用于更新、删除、打印等的按钮。主窗口的编程器只编码了新按钮,只显示新按钮。

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

如果我的事件未附加,则按钮可见性 = 折叠结束如果

提前感谢您的所有帮助!

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

若要检查包含工具栏控件的窗口是否已注册到 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

问题是何时调用该代码。如果要完全隐藏相应的工具栏按钮,则可能需要在UserControl的OnLoaded事件中执行null-check,并将按钮的Visibility设置为VisibleCollapsed。但是,您可以随时执行此操作,即使应用程序已经在运行(我曾经实现过类似的场景,在按钮的MouseOver事件中执行null检查,并在事件未附加的情况下更改鼠标光标(以指示按钮无法单击)。