依存性プロパティおよび付属の依存性プロパティがあります。 "Attached Properties"は依存関係プロパティであり、そのようなサポート依存性はproperty value inheritanceです。
基本的な依存関係のプロパティについては、基本的にwpf(論理/視覚的)ツリーの親要素から値を継承していることが非常に大まかです。依存関係プロパティ(添付されているかどうか)は、metadataがFrameworkPropertyMetadataOptionsに設定されている場合、その値を「下向き」に継承します。 フラグを継承し、多くの場合これがそうです。
添付プロパティは、DependencyObject.SetValueメソッドを使用して任意のwpfオブジェクト(基本的に、少なくとものDependencyObject)で設定できるプロパティです。このメカニズムの目的は、子オブジェクト自体ではなく、親オブジェクトに必要な情報を他のオブジェクトに「アタッチ」することです。たとえば、Grid.Rowは、レンダリング領域内にアイテムを配置するためにグリッドが必要とする添付プロパティです。
依存プロパティは、wpfオブジェクトシステムによって自動的に "下に"継承されます。
添付されたプロパティは、特定のオブジェクトのコード内で明示的に上向きに調べられます。 Gridの場合、アイテムの配置場所を決定すると、Grid.RowとGrid.Columnの値がそれぞれの含まれている項目のプロパティをチェックします。
また、添付されているオブジェクトを何らかの形で変更するカスタムの添付プロパティを作成する方法もあります(たとえば、Drag'n'Drop functionality via attached properties)。
継承している添付プロパティの良い例はTextElement.FontFamilyです。 Grid.RowプロパティとGrid.ColumnプロパティにはInheritsフラグが設定されていません。
はTextElement.FontFamilyは、リフレクターから:
FontFamilyProperty = DependencyProperty.RegisterAttached("FontFamily", typeof(FontFamily), typeof(TextElement), new FrameworkPropertyMetadata(SystemFonts.MessageFontFamily, FrameworkPropertyMetadataOptions.Inherits | FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsMeasure), new ValidateValueCallback(TextElement.IsValidFontFamily));
Grid.Row、リフレクターから:
RowProperty = DependencyProperty.RegisterAttached("Row", typeof(int), typeof(Grid), new FrameworkPropertyMetadata(0, new PropertyChangedCallback(Grid.OnCellAttachedPropertyChanged)), new ValidateValueCallback(Grid.IsIntValueNotNegative));
興味深く有益です。しかし、このシナリオはどうですか?2x2グリッド(A)には2x2グリッド(B)が含まれています。グリッドBにはボタンがあります。グリッドBにグリッドがある場合。Column Attached Propertyは1に設定されています(グリッドAの親グリッドの2番目の列に表示されます)。AttachedプロパティはグリッドBのButtonに向かってカスケードしないようにしてください。 – Pwninstein
良い質問です。答えに情報を追加しました。 –
恐ろしい!ありがとうございました! – Pwninstein