WPF の StaticResource と DynamicResource の違いは何ですか? 質問する

WPF の StaticResource と DynamicResource の違いは何ですか? 質問する

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

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

またはDynamicResourceとして

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

ほとんどの場合 (常に?)、1 つだけが機能し、もう 1 つは実行時に例外をスローします。しかし、その理由を知りたいです。

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

静的と動的の選択は見た目ほど恣意的ではないと思いますが、パターンがわかりません。

ベストアンサー1

静的リソースアプリケーションが実際に実行される前に行われる XAML の読み込み中に解決され、プロパティに割り当てられます。割り当てられるのは 1 回のみで、リソース ディクショナリへの変更は無視されます。

ダイナミックリソース読み込み中に Expression オブジェクトをプロパティに割り当てますが、実行時に Expression オブジェクトに値が要求されるまで、リソースは実際には検索されません。これにより、実行時に必要になるまでリソースの検索が延期されます。良い例としては、XAML で後で定義されるリソースへの前方参照が挙げられます。もう 1 つの例は、実行時まで存在しないリソースです。ソース リソース ディクショナリが変更されると、ターゲットが更新されます。

おすすめ記事