混乱している質問があります。私はMCP(test 70-511 Windows App. Dev. with .Net 4)のために勉強しており、リソースのセクションとコード内のリソースの変更に取り組んでいます。以下は本からの直接の引用です (セルフペーストレーニングキット):
リソースが参照するオブジェクトがコードで変更された場合、そのリソースを使用するオブジェクトは、リソースの参照方法に応じて異なる動作をします。DynamicResourceマークアップで参照されるリソースは、リソースがコードで変更されると、新しいオブジェクトを使用します。StaticResourceマークアップでリソースを参照するオブジェクトは、 Resourcesコレクションから最初に取得したオブジェクトを引き続き使用し、変更を認識しません。
そうは言っても、彼らが取り組んでいる質問の 1 つは、XAML の質問です。その質問のコードは次のとおりです。
<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<SolidColorBrush Color="Red" x:Key="ForegroundBrush" />
<SolidColorBrush Color="Blue" x:Key="BackgroundBrush" />
</Window.Resources>
<Grid>
<Button Background="{StaticResource BackgroundBrush}"
Foreground="{DynamicResource ForegroundBrush}" Height="23"
Margin="111,104,92,0" Name="Button1"
VerticalAlignment="Top">Button</Button>
</Grid>
</Window>
問題は、次のコードを実行すると、ボタンの色はどうなるかということです。
SolidColorBrush aBrush = new SolidColorBrush(Colors.Green);
this.Resources["ForegroundBrush"] = aBrush;
SolidColorBrush bBrush;
bBrush = (SolidColorBrush)this.Resources["BackgroundBrush"];
bBrush.Color = Colors.Black
回答の選択肢は次のとおりです。
- 何も起こりません。
- 背景が黒くなります。
- 前景が緑色に変わります。
- 2と3の両方。
本で出された答えは 4 2 と 3 の両方です。
私のジレンマ/混乱は次のとおりです。動的リソースがコードで行われた変更を反映するように変更され、静的リソースが最初に取得したオブジェクトを引き続き使用することが本に記載されている場合、なぜバックグラウンドとフォアグラウンドの両方が上記のコード/XAML の例でのボタンの変更? そして、私はそれを試してみましたが、どちらも変わります。
どんな助けでも大歓迎です。