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

时间:2016-04-21 13:17:52

标签: wpf user-controls

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

问题在于:当我创建该语句构建控件的实例时,控件类会注册一个路由事件,当用户单击“删除”按钮时会触发该事件。此事件由“父”用户控件处理,方法是从包含“WHERE”条件列表的堆栈面板中删除控件。它有效。一旦。如果我尝试添加该控件的另一个实例,则会抛出异常:“已使用OwnerType'SQLBuilder.ClauseControl'的RoutedEvent Name'DutuRule'。”

我花了大部分时间用谷歌搜索,并访问我发现的每个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); }
    }

......(其他类定义)

1 个答案:

答案 0 :(得分:0)

解决了!必须声明RoutedEvent'静态'。 (至少,这对我有用;你的里程可能会有所不同。)