WPFでブラシ、テンプレート、スタイルなどのリソースを使用する場合、それらはStaticResourcesとして指定できます。
<Rectangle Fill="{StaticResource MyBrush}" />
またはDynamicResourceとして
<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" />
ほとんどの場合 (常に?)、1 つだけが機能し、もう 1 つは実行時に例外をスローします。しかし、その理由を知りたいです。
- 主な違いは何ですか?メモリやパフォーマンスへの影響など
- WPF には、「ブラシは常に静的である」や「テンプレートは常に動的である」などのルールがありますか?
静的と動的の選択は見た目ほど恣意的ではないと思いますが、パターンがわかりません。
ベストアンサー1
あ静的リソースアプリケーションが実際に実行される前に行われる XAML の読み込み中に解決され、プロパティに割り当てられます。割り当てられるのは 1 回のみで、リソース ディクショナリへの変更は無視されます。
あダイナミックリソース読み込み中に Expression オブジェクトをプロパティに割り当てますが、実行時に Expression オブジェクトに値が要求されるまで、リソースは実際には検索されません。これにより、実行時に必要になるまでリソースの検索が延期されます。良い例としては、XAML で後で定義されるリソースへの前方参照が挙げられます。もう 1 つの例は、実行時まで存在しないリソースです。ソース リソース ディクショナリが変更されると、ターゲットが更新されます。