私もそれらについて混乱しました。以下のこの例を参照してください。
<Window x:Class="WpfApplicationWPF.CommandsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CommandsWindow" Height="300" Width="300">
<StackPanel>
<Button Name="ButtonNew"
Click="ButtonNew_Click"
Background="{DynamicResource PinkBrush}">NEW</Button>
<Image Name="ImageNew"
Source="pack://application:,,,/images/winter.jpg"></Image>
</StackPanel>
<Window.Background>
<DynamicResource ResourceKey="PinkBrush"></DynamicResource>
</Window.Background>
</Window>
ここでは、ボタンとウィンドウに動的リソースを使用しており、どこにも宣言していません。実行時に、階層のResourceDictionaryがチェックされます。定義していないため、デフォルトが使用されると思います。
Buttonのクリックイベントに以下のコードを追加すると、DynamicResourceを使用しているため、それに応じて背景が更新されます。
private void ButtonNew_Click(object sender, RoutedEventArgs e)
{
this.Resources.Add( "PinkBrush"
,new SolidColorBrush(SystemColors.DesktopColor)
);
}
StaticResourceを使用した場合:
- リソースはXAMLで宣言する必要があります
- そして、それも「前に」それらが使用されます。
混乱を解消したいと思います。