4

依存関係オブジェクトに対してアタッチされたプロパティを使用する場合、実際にはプロパティと値を依存関係オブジェクトにマップすると思います。

例えば<DockPanel><TextBlock x:Name="MyText" DockPanel.Dock="Top"/></DockPanel>

ここで、値「Top」は、依存関係オブジェクトのテキストブロック「MyText」を介してDockPanelsDockPropertyにマップされます。

しかし、私の質問は、このマッピングはいつ破棄されるのかということです。私がこれを求めている理由は、DockPanelのDockPropertyがstatic\sharedであるためです。したがって、ある種の内部ディクショナリで、そのような複数のマッピングペア(値、依存関係オブジェクト)がそれに対して維持されている必要があります。(単なる推測)

したがって、これは依存関係オブジェクトが破棄されたときにガベージコレクションされる必要があります。

だから今私のポイントは、そのような添付プロパティの破棄が行われているかどうかを知る必要がある方法はありますか(特定の添付プロパティと依存関係オブジェクトのある種の切断または破棄イベントなど)?

また、そのようなガベージコレクションが行われない場合、これはメモリリークではありませんか?

ThxVinitSankhe。

4

2 に答える 2

2

WPFの新しいプロパティシステムを理解しているので、DependecyObject自体に値が格納されます。あなたの例では、これはテキストブロックになります。静的メンバーを呼び出すときに混乱しないでください。次のように実装されることになっています。

element.SetValue(DockPanel.TopProperty, value);

したがって、静的フィールドストレージは発生しません。

于 2009-12-16T12:32:05.753 に答える
1

WeakReferenceを使用して作成されたと思います。したがって、空の参照の削除は定期的に行われます。

于 2009-12-16T11:46:21.680 に答える