附加路由事件后,未调用添加处理程序方法

时间:2018-08-10 21:21:37

标签: wpf vb.net attached-properties routed-events attachedbehaviors

我正在尝试创建一个附加行为,以将自动完成列表添加到标准TextBox控件中。我的目标是每次引发TextChanged事件时,我的AutoCompleteBehavior类都会创建一个弹出窗口,并在其中填充潜在的自动完成结果。 为了获得这些结果,我的AutoCompleteBehavior声明了以下事件:

Public Shared ReadOnly AutoCompleteListRequestedEvent As RoutedEvent =
                  EventManager.RegisterRoutedEvent("AutoCompleteListRequested",
                  RoutingStrategy.Bubble,
                  GetType(AutoCompleteListRequestedEventHandler), GetType(AutoCompleteBehavior))

以上内容旨在作为附加事件,其用法如下:

<TextBox lib:AutoCompleteBehavior.AutoCompleteListRequested="EventHandlerHere"/>

这个想法是,当TextChanged被提出时,AutoCompleteBehavior.AutoCompleteListRequested也被提出,这要求执行程序为当前输入提供建议列表。

要使其正常工作,我必须在附加的事件附加到所说的TextBox.TextChanged后立即加入TextBox事件。对于Microsoft,我应该能够声明子Add*HandlerRemove*Handler,其中“ *”是附加事件的名称,只要添加了附加事件或从元素中删除。 所以在事件声明的正下方,我有:

        Public Shared Sub AddAutoCompleteListRequestedHandler(TB As TextBox, handler As AutoCompleteListRequestedEventHandler)
            'Code to hook into TextBox.TextChanged
        End Sub

        Public Shared Sub RemoveAutoCompleteListRequestedHandler(TB As TextBox, handler As AutoCompleteListRequestedEventHandler)
            'Code to unhook fromTextBox.TextChanged
        End Sub

我的问题是AddAutoCompleteListRequestedHandler从未被调用。如果我调用TextBox.RaiseEvent以引发AutoCompleteListRequested,则XAML中定义的事件处理程序会被调用(因此该事件已附加),但看来我的AddAutoCompleteListRequestedHandler已被完全跳过。

作为最后的说明,我发现了这个问题here,似乎在描述相同的问题(我的代码也和他一样在dll中),但是已经存在两年了,从未得到回答。

1 个答案:

答案 0 :(得分:0)

连接事件处理程序时,XAML处理器不会调用您的静态方法。

如果您想在TextBox引发TextChanged事件时做点什么,最好实现附加的行为,并在{{ 1}}或TextChanged方法中,具体取决于您创建的行为的类型。

有关附加行为的更多信息,请参阅我的答案here