多实例用户控件 WPF 中的路由事件



我正在构建一个WPF用户控件,可以这么说,它"动态"生成SQL WHERE子句。 反过来,该控件承载任意数量的另一个用户控件,该控件构造该 WHERE 子句中的各个条件。此子控件的实例包含多个组合框、一个文本框(用于输入条件的目标值)和几个按钮 -- 一个用于向列表添加值(例如,用于"IN"条件),另一个用于删除语句 -- 以及表示它的控件 --

完全。

问题是:当我创建该语句生成控件的实例时,控件类注册一个路由事件,当用户单击该"删除"按钮时触发该事件;此事件由"父"用户控件处理,方法是从包含"WHERE"条件列表的堆栈面板中删除该控件。 它有效。 一次。 如果我尝试添加该控件的另一个实例,它会引发异常:"已使用所有者类型'SQLBuilder.ClauseControl'的路由事件名称'删除规则'。

花了一天的大部分时间在谷歌上搜索,并访问了我找到的每个 StackOverflow 参考,但没有专门处理通过特定用户控件的多个实例注册路由事件的问题。

我在这里错过了什么?

编辑:这是我注册事件的代码:

    public partial class ClauseControl : UserControl
{
    // Register the routed event
    public readonly RoutedEvent DeleteRule = EventManager.RegisterRoutedEvent("DeleteRule", RoutingStrategy.Bubble,
                typeof(RoutedEventHandler), typeof(ClauseControl));
    public event RoutedEventHandler DeleteRuleEvent
    {
        add { AddHandler(DeleteRule, value); }
        remove { RemoveHandler(DeleteRule, value); }
    }

。(类定义的其余部分)

解决了! 路由事件必须声明为"静态"。 (至少,这对我有用;你的里程可能会有所不同。

最新更新