使用DynamicResource延伸,而不是对所有引用StaticResource的扩展,可以在运行时改变密钥。
然后,您可以使用类似下面的代码来更改值。
Application.Current.Resources["Default Color"] = System.Windows.Media.Colors.Red;
这可以为每个对象做...
public MyWindow()
{
InitializeComponent();
this.Resources["Default Color"] = System.Windows.Media.Colors.Red;
PART_DynamicButton.Resources["Default Color"] = System.Windows.Media.Colors.Red;
}
这是比清除整个合并资源字典,并添加一个新的,如果你只需要修改几个值更高的性能。
只记得DynamicResource扩展只适用于DependencyProperties,而在Xaml中实例化的Freezable对象通常会被冻结,从而阻止修改它们的DependencyProperties。因此,如果笔刷在xaml中实例化,请勿尝试更改SolidColorBrush的颜色。
这里是一个解决办法
<! -- Xaml -->
<SolidColorBrush x:Key="App_Page_Background" Color="White"/>
<Page Background="{DynamicResource App_Page_Background}"/>
// C# code
Application.Current.Resources["App_Page_Background"] = new SolidColorBrush(Colors.Red);
你为什么要这么做?几乎可以肯定的是,比运行时用样式更改文件更好。 – 2012-03-26 17:58:55
我对我的应用程序有各种主题。那么如何更改FileName ..因为我在其他各种XAML文件中使用了Brushes.xaml。 – 2012-03-26 18:01:46