2010-10-14 7 views
1

У меня есть XamlParseException в некотором коде, который пытается выбрать весь текст в TextBox.XamlParseException инициализирует статический класс

Xaml: за SelectAllTextOnFocus.IsTextSelectedOnFocus = "True" />

Код::

Общие

public static class SelectAllTextOnFocus 
{ 
    public static readonly DependencyProperty IsTextSelectedOnFocusProperty = DependencyProperty.RegisterAttached("IsTextSelectedOnFocus", typeof(bool), typeof(SelectAllTextOnFocus), new UIPropertyMetadata(false, OnIsTextSelectedOnFocusChanged)); 

    public static bool GetIsTextSelectedOnFocus(TextBox item) 
    { 
     return (bool)item.GetValue(IsTextSelectedOnFocusProperty); 
    } 

    public static void SetIsTextSelectedOnFocus(TextBox item, bool value) 
    { 
     item.SetValue(IsTextSelectedOnFocusProperty, value); 
    } 

    static void OnIsTextSelectedOnFocusChanged(DependencyObject depObj, DependencyPropertyChangedEventArgs e) 
    { 
     var item = depObj as TextBox; 
     if (item == null) 
     { 
      return; 
     } 

     if (e.NewValue is bool == false) 
     { 
      return; 
     } 

     if ((bool)e.NewValue) 
     { 
      item.GotFocus += OnGotFocus; 
     } 
     else 
     { 
      item.GotFocus -= OnGotFocus; 
     } 
    } 

Я получаю XmalParseException, с сообщением: Тип инициализатор ' Common.SelectAllTextOnFocus 'сделал исключение.

Любые идеи, что вызывает это, или как его отладить?

Внутреннее исключение: свойство «IsTextSelectedOnFocus» уже зарегистрировано «SelectAllTextOnFocus».

Это регистрируется при создании в статическом классе - так как он может быть зарегистрирован дважды?

+0

Что такое 'InnerException.InnerException'? – SLaks

+0

Я добавил внутреннее сообщение об исключении. –

ответ

2

Предполагая, что вы поймали это в отладчике, посмотрите на InnerException, в котором должно отображаться исключение, вызывающее TypeInitializationException. Это должно дать вам гораздо больше намека на то, где искать.

я могу видеть только одну строку, которая может быть проблема, хотя:

public static readonly DependencyProperty IsTextSelectedOnFocusProperty = 
    DependencyProperty.RegisterAttached("IsTextSelectedOnFocus", 
     typeof(bool), 
     typeof(SelectAllTextOnFocus), 
     new UIPropertyMetadata(false, OnIsTextSelectedOnFocusChanged)); 

Это единственный код, который будет выполняться в типе инициализатора.

Я не могу понять, что с ним не так, но я не очень хорошо разбираюсь в регистрации свойств зависимостей.

+1

В этом была проблема - появился второй класс, который явно был скопирован и вставлен, который все еще пытался зарегистрироваться в исходном типе класса. –

+0

@ Джэксон: Отлично - рад, что ты его нашел :) –

1

Тип intitializer (также известный как статический конструктор) запускает инициализаторы для ваших полей static.

Иными словами, инициализатор выдает исключение.

Смежные вопросы