我正在尝试创建一个附加行为,以将自动完成列表添加到标准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*Handler
和Remove*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中),但是已经存在两年了,从未得到回答。
答案 0 :(得分:0)
连接事件处理程序时,XAML处理器不会调用您的静态方法。
如果您想在TextBox
引发TextChanged
事件时做点什么,最好实现附加的行为,并在{{ 1}}或TextChanged
方法中,具体取决于您创建的行为的类型。
有关附加行为的更多信息,请参阅我的答案here。