1. ホーム
  2. .net

[解決済み] WPFのStaticResourceとDynamicResourceの違いは何ですか?

2022-03-20 08:23:48

質問

WPFでブラシ、テンプレート、スタイルなどのリソースを使用する場合、StaticResourcesとして指定することもできます。

<Rectangle Fill="{StaticResource MyBrush}" />

またはDynamicResourceとして

<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}"  />

ほとんどの場合(常に?)、一方だけが動作し、もう一方は実行中に例外をスローします。しかし、私はその理由を知りたいのです。

  • 主な違いは何ですか。メモリやパフォーマンスへの影響など
  • WPFでは、ブラシは常に静的で、テンプレートは常に動的である、といったルールがあるのでしょうか?

I とする StaticとDynamicの間の選択は、見かけほど恣意的ではありません...しかし、私はそのパターンを見ることができません。

どのように解決するのか?

A StaticResource(スタティックリソース は、アプリケーションが実際に実行される前に発生する XAML のロード中に解決され、プロパティに割り当てられます。これは一度だけ割り当てられ、リソース辞書へのいかなる変更も無視されます。

A DynamicResource は、ロード中にプロパティに Expression オブジェクトを割り当てますが、実行時に Expression オブジェクトに値が要求されるまで、リソースを実際に検索しません。これは、実行時に必要になるまでリソースの検索を延期します。良い例は、XAML で後に定義されるリソースへの前方参照です。他の例としては、実行時まで存在しないリソースがある。これは、ソースリソース辞書が変更された場合、ターゲットを更新する。