12

MSDN - Panel.InternalChildren プロパティによると:

Panelから派生したクラスは、 MeasureCoreArrangeCore などの内部オーバーライドにChildrenプロパティ ではなく、このプロパティを使用する必要があります。


したがって、これは実際には 2 つの部分からなる質問です。

  1. FooPanelから派生した独自の Panel を作成すると、またはPanelをオーバーライドできないようです。なぜその声明がそこにあるのかさえわかりません。ただし、andをオーバーライドすることはできます。したがって、これら 2 つのメソッドにプロパティを使用する必要があるのでしょうか。MeasureCoreArrangeCoreMeasureOverrideArrangeOverrideInternalChildren

  2. Childrenプロパティとプロパティの本当の違いは何InternalChildrenですか?

4

2 に答える 2

12
  1. MeasureOverride と ArrangeOverride を上書きしますが、これはドキュメントの間違いであるか、Microsoft の内部従業員を対象としています。MeasureCore と ArrangeCore は FrameworkElement によって封印されているため、オーバーライドすることはできません。

  2. Children プロパティは public であり、保護されている InternalChildren を呼び出すだけです。Children はインライン化されるため、どちらもおそらく安全です。

MSDN はそうではないと言っていますが ( http://msdn.microsoft.com/en-us/library/ms754152.aspx )、ドキュメントは間違っています。(リフレクターを使用して、Children の実装が単に InternalChildren を呼び出していることを確認します)

于 2011-04-07T17:27:05.250 に答える
3

編集:CodeNakedが修正したように-MSDNドキュメントは実際には正しくありません。InternalChildrenとChildrenは同じです。

リフレクターを使用すると、Childrenの実装を確認できますpublic UIElementCollection Children { get { return this.InternalChildren; } }。したがって、ブードゥーが起こっていない限り、それらは同じです。


子は定期的に追加された子ですが、InternalChildrenには、データバインディングを介して追加された子が含まれます(パネルがItemsPanelTemplateの場合)。

「Childrenは、Panelで構成される要素の子コレクションを表します。InternalChildrenは、Childrenコレクションのコンテンツとデータバインディングによって生成されたメンバーを表します。どちらも、親Panel内でホストされる子要素のUIElementCollectionで構成されます。」

http://msdn.microsoft.com/en-us/library/ms754152.aspxを参照してください

于 2012-02-09T15:44:15.737 に答える