2009-06-25 22 views
1

ContentPropertyを「テキスト」に設定する際に問題があります。私は次のエラーが発生しました:'Text'プロパティのContentPropertyAttributeが無効です

'MyType'タイプのContentPropertyAttributeが無効です。プロパティ 'Text'が見つかりません。

コードが背後にある次のようになります。私がしたDependencyProperty以外のCLRプロパティ何か名前場合

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

は、私は実際にそれが動作するようになってきた - 私は間違ってDependencyPropertiesを使用していますか?

答えて

4

typeof(LinkText)はtypeof(MyType)でなければならないと思っていましたが、テストプロジェクトをコンパイルすることができました。エラーの原因となっているXAMLファイルを投稿できますか?

EDIT:フォロー

あなたの問題は、あなたのコードサンプルでは、​​あなたが持っている2つの静的メソッドです。それらを削除しようとすると、コンパイルして動作する必要があります。静的メソッドは、「依存プロパティ」ではなく「添付プロパティ」でのみ機能します。 TextPropertyは、文字列型であるので、それはデフォルト値の文字列を期待し

... new PropertyMetadata(false) ... 

+0

申し訳ありませんが、それは私がそれに従うことを容​​易にするためにタイプ名を整理していただけでした。 typeof(MyType)とします。 –

+1

「新しいPropertyMetadata(false))」を変更する必要があります。 「new PropertyMetadata(null))」などの文字列値に変換します。 – micahtan

+0

実際、GetTextとSetTextを削除するとエラーが取り除かれます。 – rmoore

1

エラーは、デフォルトで設定された値、だから来ています。試してみてください:

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

ありがとう、それは私が持っていた愚かなエラーを説明しますが、ContentProperty( "Text")が失敗する理由は説明しません。 –