使用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