質問

WPFについて学ぶために趣味のプロジェクトを開始しましたが、私の調査でこのWPF PropertyGrid http:// www.codeplex.com/wpg

http://wpg.codeplex.com/SourceControl/ListDownloadableCommitsからソースをダウンロードしました。 aspx 、そしてそれを閲覧し始め、かっこよく見え、動作します。しかし、私の人生では、それがどのように機能するのかわかりません。次の質問は、一見したところです。

  • どのようにオブジェクトがどのプロパティを持っているかを知るのですか?
  • コントロールをレンダリングして値を編集する方法
  • どのコントロールをレンダリングするかをどのように決定しますか? (プロパティのメタデータの説明を推測しています)

DependancyPropertiesが新しい値間のデータ交換を処理することを理解しています。

  • すべての魔法を行うXAMLまたはCodeBehindコードはどこにありますか?

Default.xamlファイルには多くのXAMLコードがありますが、私が知る限り、そこに定義されているのはスタイルと外観だけです。

役に立ちましたか?

解決

  
      
  • どのようにオブジェクトがどのプロパティを持っているかを知るのですか?
  •   

System.ComponentModel.TypeDescriptor を使用して、 TypeDescriptor.GetProperties PropertyDescriptor は、各プロパティに関する豊富な情報(例: PropertyDescriptor.IsReadOnly は、プロパティが読み取り専用であることを通知します)。さらに、 PropertyDescriptor.GetValue および PropertyDescriptor.SetValue 、プロパティの値を取得して書き込むことができます。

  
      
  • コントロールをレンダリングして値を編集する方法
  •   
  • どのコントロールをレンダリングするかをどのように決定しますか? (プロパティのメタデータの説明を推測しています)
  •   

アイテム ObservableCollection Item は、コアモデルオブジェクトの基本クラスであり、 Property です。 Property は、プロパティの基になる型( PropertyDescritor.PropertyType )を公開し、 PropertyDescriptor.GetValue および PropertyDescriptor.SetValue Property.Value を介したメソッド。これが、編集を可能にするためにバインドされているものです。 DataTemplate s はここの鍵。いくつかのCLR型には、表示されるコントロールをレンダリングするカスタム DataTemplate があります。たとえば、 Boolean タイプは CheckBox としてレンダリングされ、 Enum ComboBox としてレンダリングされます。デフォルトの DataTemplate TextBox です。

  
      
  • すべての魔法を行うXAMLまたはCodeBehindコードはどこにありますか?
  •   

その傾向は Themes \ Default.xaml にあります。

コードはこのように要約できます。オブジェクトのプロパティに関する情報をカプセル化し、プロパティの値を読み書きするプロパティ( Property.Value )を提供するデータ( Data \ Property )があります。このデータは、 Themes \ Default.xamlの DataTemplate sを使用してレンダリングされるカスタムコントロール( PropertyGrid )の ObservableCollection として公開されます。

  

Default.xamlファイルには多くのXAMLコードがありますが、私が知る限り、そこに定義されているのはスタイルと外観だけです。

DataTemplate を見落とさないでください。

他のヒント

  
      
  • どのようにオブジェクトがどのプロパティを持っているかを知るのですか?
  •   

Windows Formsプロパティグリッドと同じように機能する場合、以下を実行します。

  • オブジェクトがICustomTypeDescriptorを実装する場合、このインターフェイスからプロパティを取得します(GetPropertiesメソッドを使用)
  • それ以外の場合は、オブジェクトのタイプのリフレクションを使用します(obj.GetType()。GetProperties()

他の質問については...まあ、私はコードを見ていないので、答えられません;)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top