如何通过存储在App.xaml中的资源字典中的代码动态更改样式?
我正在尝试让整个应用程序中的几个核心颜色能够由用户动态更改。我现在的想法是使用一个SolidColorBrush作为我的“主题颜色”,然后在我的主要风格中引用它如何通过存储在App.xaml中的资源字典中的代码动态更改样式?,xaml,uwp,Xaml,Uwp,我正在尝试让整个应用程序中的几个核心颜色能够由用户动态更改。我现在的想法是使用一个SolidColorBrush作为我的“主题颜色”,然后在我的主要风格中引用它 <SolidColorBrush x:Key="ReflectiveColor1" Color="#FF0E777B"></SolidColorBrush> 错误: System.Runtime.InteropServices.COMException: 'No installed components wer
<SolidColorBrush x:Key="ReflectiveColor1" Color="#FF0E777B"></SolidColorBrush>
错误:
System.Runtime.InteropServices.COMException: 'No installed components were
detected.
Local values are not allowed in resource dictionary with Source set
有没有办法让这一切顺利?我假设此错误是因为它不希望我们修改存储在那里的样式,但我不知道解决方法。应用程序将无法找到资源
ReflectVeColor1
,直到您将所有资源字典合并在一起
更改App.xaml
以合并词典。如下图所示
<Application.Resources>
<ResourceDictionary >
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DictionaryAlienwareTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后,您应该能够以与以前相同的方式访问资源。在将所有资源字典合并到一起之前,应用程序将无法找到该资源 更改
App.xaml
以合并词典。如下图所示
<Application.Resources>
<ResourceDictionary >
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DictionaryAlienwareTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
然后你应该能够以与以前相同的方式访问资源。首先,在你的
App.xaml
中,如果你想引用你自己定义的DictionaryAlienwareTheme.xaml
,你需要像@AVK所说的那样将字典合并到当前的应用程序中。有关更多详细信息,请参阅的“合并资源字典”部分
其次,在使用合并资源后,如果要更新后面的主题资源代码,可能需要使用Application.Current.Resources.MergedDictionaries
来访问合并词典,而不是Application.Current.Resources
。比如说,
public MainPage()
{
this.InitializeComponent();
var mergedDict = Application.Current.Resources.MergedDictionaries.FirstOrDefault();
((SolidColorBrush)mergedDict["ReflectiveColor1"]).Color = Colors.Red;
}
顺便说一句,正如上面的代码片段所示,
ReflectiveColor1
是SolidColorBrush
您不能直接设置颜色。首先,在您的App.xaml
中,如果您想引用您自己定义的DictionaryAlienwareTheme.xaml
,您需要将字典合并到当前的应用程序中,如@AVK所说。有关更多详细信息,请参阅的“合并资源字典”部分
其次,在使用合并资源后,如果要更新后面的主题资源代码,可能需要使用Application.Current.Resources.MergedDictionaries
来访问合并词典,而不是Application.Current.Resources
。比如说,
public MainPage()
{
this.InitializeComponent();
var mergedDict = Application.Current.Resources.MergedDictionaries.FirstOrDefault();
((SolidColorBrush)mergedDict["ReflectiveColor1"]).Color = Colors.Red;
}
顺便说一句,正如上面的代码片段所示,
ReflectiveColor1
是SolidColorBrush
您不能直接设置颜色。这似乎不能完全工作,尽管它更接近。在另一个XAML中,您将如何引用ReflectColor 1?我尝试过绑定和源代码,但它们似乎没有更新到代码中选择的颜色。这似乎没有完全起作用,尽管它更接近。在另一个XAML中,您将如何引用ReflectColor 1?我尝试了绑定和源代码,但它们似乎没有更新到代码中选择的颜色。颜色分配也错误。您正在尝试为以前的SolidColorBrush指定颜色。它可能是((SolidColorBrush)Application.Current.Resources[“ReflectiveColor1”])。Color=Colors.Black代码>颜色分配也错误。您正在尝试为以前的SolidColorBrush指定颜色。它可能是((SolidColorBrush)Application.Current.Resources[“ReflectiveColor1”])。Color=Colors.Black代码>我完全按照您的要求完成了操作,但仍然收到错误-“System.Runtime.InteropServices.COMException:“未检测到任何已安装的组件。在源代码集为[Line:0 Position:0]的资源字典中不允许使用本地值”。我完全按照您的要求完成了操作,仍然收到错误-“System.Runtime.InteropServices.COMException:'未检测到安装的组件。在源集为[行:0位置:0]的资源字典中不允许使用本地值“