2010-10-14 5 views
1

J'ai un XamlParseException dans un code qui essaie de sélectionner tout le texte dans un TextBox.XamlParseException initialisation d'une classe statique

Xaml:

commune: SelectAllTextOnFocus.IsTextSelectedOnFocus = "true" />

code derrière:

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; 
     } 
    } 

je reçois un XmalParseException, avec le message: Le initialiseur de type pour ' Common.SelectAllTextOnFocus 'a lancé une exception.

Des idées sur ce qui en est la cause ou sur la manière de le déboguer?

L'exception interne est: La propriété 'IsTextSelectedOnFocus' était déjà enregistrée par 'SelectAllTextOnFocus'.

Ceci est enregistré lors de la création dans une classe statique - comment peut-il être enregistré deux fois?

+0

Qu'est-ce que 'InnerException.InnerException'? – SLaks

+0

J'ai ajouté le message d'exception interne. –

Répondre

2

En supposant que vous avez détecté cela dans le débogueur, regardez le InnerException, qui devrait vous montrer l'exception qui provoque le TypeInitializationException. Cela devrait vous donner beaucoup plus d'un aperçu de l'endroit où regarder.

Je ne peux voir une ligne qui pourrait le problème cependant:

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

C'est le seul code qui est exécuté dans l'initialiseur de type.

Je ne vois pas ce qui ne va pas avec ça, mais je ne suis pas très familier avec l'enregistrement des propriétés de dépendance.

+1

C'était le problème - il y avait une deuxième classe qui avait clairement été copiée-collée et qui essayait toujours de s'inscrire au type de classe d'origine. –

+0

@Jackson: Excellent - content que vous l'ayez trouvé :) –

1

L'initialiseur de type (également connu sous le nom de constructeur statique) exécute les initialiseurs pour vos champs static. En d'autres termes, l'initialiseur IsTextSelectedOnFocusProperty lève une exception.

Questions connexes