使用带有UserControl的userbaseclass时获取XamlParse异常

时间:2010-10-21 13:50:14

标签: c# wpf wpf-controls

我有一个抽象基类,它将UserControl类作为子类,没有XAML。当我基于基类创建一个类时,一切正常(编译和执行)。但是当我向基类添加代码来触发事件时,它会编译,但是在运行时我会得到一个'类型为'ExtendedDisplay.UserControls.Annotations'的构造函数的调用,它与指定的绑定约束相匹配,引发了一个异常。错误。不知道为什么。 这是我的基类代码,

公共抽象类BaseClass:UserControl {       protected static System.Type ControlType;

  public static readonly RoutedEvent RefreshEvent = EventManager.RegisterRoutedEvent(
       "RefreshEvent",
       RoutingStrategy.Bubble,
       typeof(RefreshEventHandler),
       ControlType);

  public delegate void RefreshEventHandler(object sender, RefreshEventArgs e);

  public event RefreshEventHandler RefreshNeeded
  {
      add { AddHandler(RefreshEvent, value); }
      remove { RemoveHandler(RefreshEvent, value); }
  }

  protected void RaiseRefreshEvent(RoutedEventArgs e)
  {
      RaiseEvent(new RefreshEventArgs(RefreshEvent, this));

      e.Handled = true;
  }

  public class RefreshEventArgs : RoutedEventArgs
  {
      public RefreshEventArgs(RoutedEvent routedEvent, object source)
            : base(routedEvent, source) { }
  }

}

此代码在硬编码到UserControl时按预期工作。任何想法/帮助将不胜感激。

在进一步测试时,似乎我无法用变量替换EventManager.RegisterRoutedEvent函数中的最后一个参数。我有一个变量“protected static System.Type ControlType;”由派生控件设置为控件类型。当硬编码时,这不起作用。为了使它工作,我不能使用变量,即使它是正确的类型。还有什么可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

确定, 终于想通了。我所做的是让基类成员“RefreshEvent”在基类中声明并在派生类中赋值。这很有效,并且我需要保留基类中的大量样板文件。