Header と呼ばれる 1 つの DependencyProperty を含むカスタム UserControl (MyView) があります。この UserControl は、他のいくつかの UserControls (ビュー) の一部です。DataTemplate によって解決されます
<!-- SomeView's resources -->
<DataTemplate DataType="{x:Type vm:MyViewModel">
<vw:MyView Header="{StaticResource myViewHeader}" />
</DataTemplate>
MyView を含むビューの一部は、MyView のヘッダーに同じリソースを渡しています。このため、グローバルに利用可能なリソース (アプリケーション リソース) に myvIewHeader を配置しました。
リソースをグローバルに利用できるようにすると、MyView がガベージ コレクションを取得しないため、メモリ リークが発生します。
ただし、ヘッダー リソースをコンテナー (例: SomeView) のリソース内に配置すると、すべてが適切にクリーンアップされます。
ヘッダーにグローバルに利用可能なリソースを使用するときに MyView でメモリ リークが発生しないようにするには、MyView の Unloaded イベントで Header を null に設定する必要があります。
this.Unloaded += (s, e) =>
{
this.SetValue(HeaderProperty, null);
};
私の質問はこれです:なぜこれが起こっているのですか?