2009-06-25 9 views
1

J'ai des problèmes pour définir mon objet ContentProperty sur "Texte". L'erreur que je reçois est:ContentPropertyAttribute non valide sur la propriété 'Text'

Invalide ContentPropertyAttribute sur le type 'MyType', la propriété 'Texte' est introuvable.

Le code ressemble derrière comme ceci:

[ContentProperty("Text")] 
    public partial class MyType: UserControl 
    { 
     public MyType() 
     { 
      InitializeComponent(); 
     } 

     public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", 
                          typeof (string), 
                          typeof(MyType))); 

     public static string GetText(DependencyObject d) 
     { 
      return (string) d.GetValue(TextProperty); 
     } 

     public static void SetText(DependencyObject d, string value) 
     { 
      d.SetValue(TextProperty, value); 
     } 


     public string Text 
     { 
      get 
      { 
       return (string)GetValue(TextProperty); 
      } 
      set 
      { 
       SetValue(TextProperty, value); 
      } 
     } 
    } 

Je l'ai en fait eu à travailler si je nomme la propriété CLR autre chose que le DependencyProperty - que j'utilise DependencyProperties de façon incorrecte?

Répondre

4

Je pensais que ce serait parce que typeof (LinkText) devrait être typeof (MyType), mais j'étais capable de compiler mon projet de test. Pourriez-vous publier le fichier XAML qui provoque l'erreur?

EDIT: Followup

Votre problème est que les deux méthodes statiques que vous avez dans votre exemple de code. Essayez de supprimer ceux-ci, et il devrait compiler et travailler. Les méthodes statiques fonctionnent uniquement avec les propriétés jointes, pas les propriétés de dépendance.

+0

Désolé, c'était juste moi nettoyer les noms de type pour le rendre plus facile à suivre. Supposons qu'il dit typeof (MyType). –

+1

Vous devez changer le "new PropertyMetadata (false));" à une valeur de chaîne, telle que "new PropertyMetadata (null));" – micahtan

+0

En effet, supprimer le GetText et SetText se débarrasse de l'erreur. – rmoore

1

L'erreur vient vous êtes valeur par défaut, définissez dans:

... new PropertyMetadata(false) ... 

Parce que la TextProperty est de type chaîne, il attend une chaîne pour la valeur par défaut. Essayez:

public static readonly DependencyProperty TextProperty = 
    DependencyProperty.Register(
     "Text", 
     typeof (string), 
     typeof(MyType), 
     new PropertyMetadata(String.Empty)); 
+0

Merci, cela explique l'erreur stupide que j'avais, mais pas pourquoi ContentProperty ("Text") échoue. –

Questions connexes