如何在运行时更改另一个资源字典中使用的资源字典中的颜色?
这是我的设置:
Colours.xaml:
<SolidColorBrush x:Key="themeColour" Color="#16A8EC"/>
Styles.xaml:
<Style x:Key="titleBar" TargetType="Grid">
<Setter Property="Background" Value="{DynamicResource themeColour}"/>
</Style>
Window.xaml
.....
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="res/Styles.xaml"/>
<ResourceDictionary Source="res/Colours.xaml"/>
</ResourceDictionary.MergedDictionaries>
.....
<Grid Style="{DynamicResource titleBar}"></Grid>
代码背后:
Application.Current.Resources["themeColour"] = new SolidColorBrush(newColour);
当代码运行时,网格的颜色不会改变。我不认为Application.Current.Resources [“themeColour”]是指我的solidcolorbrush资源,因为如果我在分配新颜色之前尝试访问它,我会得到一个空对象引用异常。
那么,我该如何访问资源“themeColour”?
答案 0 :(得分:5)
为了使您的代码有效,ResourceDictionary
必须位于App.xaml
ResourceDictionary
所在的文件中:
App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary/StyleDictionary.xaml"/>
<ResourceDictionary Source="Dictionary/ColorDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Code-behind
private void Window_ContentRendered(object sender, EventArgs e)
{
SolidColorBrush MyBrush = Brushes.Black;
Application.Current.Resources["themeColour"] = MyBrush;
}
为什么使用App.xaml
会更好正确地存储在此文件中的所有样式和资源字典,因为它是专门为此创建的 - 所有应用程序资源都可以从一个地方获得。它还可以很好地影响应用程序性能。
有些情况下成功使用了 StaticResource ,但 DynamicResource (资源放在Window.Resources中)。但是在App.xaml
中移动资源后,一切都开始起作用了。
答案 1 :(得分:4)
这是因为您的资源位于Window
而不是Application
。在Window.xaml.cs中试试这个:
this.Resources["themeColour"] = new SolidColorBrush(newColour);