WPF用C#覆盖资源字典中的键
WPF override key in resource dictionary with C#
我有一个带有资源字典的 wpf 应用程序:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Color x:Key="Primary200">#FFE6FDF9</Color>
<Color x:Key="Primary500">#FF00E6BE</Color>
<Color x:Key="Primary700">#FF01987F</Color>
<SolidColorBrush x:Key="Background" Color="{StaticResource Primary500}"/>
</ResourceDictionary>
但现在 - 在应用程序启动时,我有时想更改颜色。
我试过这样的事情:
<Application x:Class="ResourceTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/ResourceTest;component/Colors.xaml"/>
</Application.Resources>
</Application>
public partial class App
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Resources.Remove("Primary500");
Resources.Add("Primary500", Colors.Red);
var mainWindow = new MainWindow();
mainWindow.Show();
}
}
这里的问题是“背景”没有改变,因为它已经用原来的颜色评估了。
最后,新颜色是从配置文件中读取的 - 所以我在编译时不知道它。
您知道如何解决这个问题吗?
提前致谢
我想你在 Application.Resources
中引用了你的 ResourceDictionary
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="YourDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
在这种情况下,您必须使用 DynamicResource
而不是 StaticResource
<SolidColorBrush x:Key="Background" Color="{DynamicResource Primary500}"/>
我有一个带有资源字典的 wpf 应用程序:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Color x:Key="Primary200">#FFE6FDF9</Color>
<Color x:Key="Primary500">#FF00E6BE</Color>
<Color x:Key="Primary700">#FF01987F</Color>
<SolidColorBrush x:Key="Background" Color="{StaticResource Primary500}"/>
</ResourceDictionary>
但现在 - 在应用程序启动时,我有时想更改颜色。
我试过这样的事情:
<Application x:Class="ResourceTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary Source="pack://application:,,,/ResourceTest;component/Colors.xaml"/>
</Application.Resources>
</Application>
public partial class App
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
Resources.Remove("Primary500");
Resources.Add("Primary500", Colors.Red);
var mainWindow = new MainWindow();
mainWindow.Show();
}
}
这里的问题是“背景”没有改变,因为它已经用原来的颜色评估了。
最后,新颜色是从配置文件中读取的 - 所以我在编译时不知道它。 您知道如何解决这个问题吗?
提前致谢
我想你在 Application.Resources
ResourceDictionary
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="YourDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
在这种情况下,您必须使用 DynamicResource
而不是 StaticResource
<SolidColorBrush x:Key="Background" Color="{DynamicResource Primary500}"/>