我正在构建一个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); }
}
......(其他类定义)
答案 0 :(得分:0)
解决了!必须声明RoutedEvent'静态'。 (至少,这对我有用;你的里程可能会有所不同。)