我有一个让我困惑的问题。我正在为我的 MCP 学习(使用 .Net 4 测试 70-511 Windows App. Dev.),并且我在资源部分和更改代码中的资源。这是直接来自书中的引述(自定进度培训套件):
如果资源引用的对象在代码中发生更改,则使用该资源的对象的行为会有所不同,具体取决于引用资源的方式。当资源在代码中更改时,使用DynamicResource标记引用的资源使用新对象。使用StaticResource标记引用资源的对象继续使用它们最初从Resources集合中检索到的对象,并且不知道更改。
话虽如此,他们让您解决的问题之一是 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 示例中的按钮更改?我已经尝试过了,他们都改变了。
任何帮助,将不胜感激。