2010-10-21 2 views
0

У меня есть абстрактный базовый класс, который подклассифицирует класс UserControl без XAML. Когда я создаю класс на основе базового класса, все работает нормально (компилируется и выполняется). Но когда я добавляю код в базовый класс для запуска события, он компилируется, но при запуске я получаю «Приведение конструктора в тип« ExtendedDisplay.UserControls.Annotations », который соответствует указанным ограничениям привязки, создавал исключение». ошибка. Не знаю, почему. Вот мой код для базового класса,Получение исключения XamlParse при использовании userbaseclass с UserControl

общественного BaseClass абстрактного класса: UserControl { защищенных статический 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;" который задается типом управления производным контролем. Это не работает при жестком кодировании. Чтобы заставить его работать, я не могу использовать переменную, даже если это правильный тип. Это вообще так?

ответ

0

ОК, Наконец-то выяснилось. То, что я сделал, состояло в том, чтобы элемент базового слова «RefreshEvent», только что объявленный в базовом классе и назначенный в производном классе. Это отлично работает и делает то, что мне нужно, чтобы сохранить основную часть шаблона в базовом классе.