2012-04-22 15 views
0

私はアプリケーションで多くのデータ入力型フォームを作成していますが、私はそれをもっと簡単にする必要があるという結論に至りました。いくつかの読書をした後、フォームを表すためにサブクラス化されたItemsControlを使ってこれを行うことができるようです。それは内部の任意のコントロールに使用することができるようにWPF添付プロパティを使用してLOBフォームをレイアウトする

私はこれを行って、今添付プロパティを設定されているものを私が今やりたい

<MySubClassedForm></MySubClassedForm> 

のようなものを持っているが、「LabelTextを」と言います。一例として、

<MySubClassedForm> 
<TextBox MySubClassedForm.LabelText="Surname" /> 
<Image MySubClassedForm.LabelText="LabelText" /> 
</MySubClassedForm> 

添付プロパティの定義: - :添付プロパティを
-

public static DependencyProperty LabelTextProperty = DependencyProperty.RegisterAttached("LabelText", typeof(string), typeof(MySubclassedForm), 
     new UIPropertyMetadata(string.Empty)); 

     public string LabelText 
     { 
      get { return (string)GetValue(LabelTextProperty); } 
      set { SetValue(LabelTextProperty, value); } 
     } 

私はMySubClassedFormに添付プロパティを置くことによって開始し、私は次のエラーを取得します'MySubClassedForm.LabelText'は 'TextBox'またはその基本クラスの1つに定義されていません。

私が間違っていることを教えてください。私はこの作業をするために何をする必要がありますか?

は感謝アレックス

+0

添付プロパティをどのように定義しましたか?コードを投稿してください。 – Clemens

+0

こんにちは、私はそれを含めることを意味しましたが、忘れました。今すぐ私の質問を編集しました。 – lostinwpf

答えて

1

あなたは、静的なgetterメソッドとsetterメソッドを定義する必要があります。

public static readonly DependencyProperty LabelTextProperty = 
    DependencyProperty.RegisterAttached(
     "LabelText", typeof(string), typeof(MySubclassedForm), 
     new UIPropertyMetadata(string.Empty)); 

public static string GetLabelText(DependencyObject obj) 
{ 
    return (string)obj.GetValue(LabelTextProperty); 
} 

public static void SetLabelText(DependencyObject obj, string value) 
{ 
    obj.SetValue(LabelTextProperty, value); 
} 

Custom Attached Propertiesに、ここでより多くの情報を取得します。

+0

これはトリックです。どうもありがとうございました。 – lostinwpf

0

あなたはmagellan を見てみる必要がありますこれは、両方のWPFは、エンジンと優れたMVCフレームワークを形成しています。いずれか一方を他方なしで使用することができます。

それはあなたがあなたのviewmodel上の特性のための適切な入力フィールドの種類を自動生成します

<Form> 
    <Field For="{Binding Path=Server.Server}" /> 
    <Field For="{Binding Path=Server.CachedExchangeMode}" /> 
    <Field For="{Binding Path=Server.Username}" /> 
    <Field For="{Binding Path=Server.SecurityMode}" /> 
</Form> 

を行うことができます。

関連する問題