【问题标题】:Add Handler method not being called when Routed Event is attached附加路由事件时不调用添加处理程序方法
【发布时间】:2018-08-10 21:21:36
【问题描述】:

我正在尝试创建附加行为以将自动完成列表添加到标准 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 后立即连接到TextBox.TextChanged 事件。根据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 中),但它已经有两年的历史了,从未得到回答。

【问题讨论】:

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


    【解决方案1】:

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

    如果您想在TextBox 引发TextChanged 事件时做某事,您最好实现附加行为并在PropertyChangedCallback 或@987654327 中连接TextChanged 事件@ 方法取决于您创建的行为类型。

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

    【讨论】:

    • 我对 Blend Behaviors 不熟悉,如果成功,我会研究这些并将其标记为答案。但我也想知道为什么我的静态方法“不会被调用”。我在帖子中链接的documentation 似乎表明他们应该这样做,所以我在那里错过了什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2010-09-23
    相关资源
    最近更新 更多