XAML:你能在app.xaml之外定义应用程序资源吗?

时间:2014-03-26 11:51:37

标签: wpf xaml

我有一个ui类集合,所有人都必须在所有实例中共享相同的主题。主题内的值受动态变化的影响。现在,这是通过将动态资源分配给所需属性并在运行时应用应用程序级资源来实现的,例如:

<Grid Background="{DynamicResource sbL1}" \>

在代码中我会调用

Application.Current.Resources("sbL1") = new SolidColorBrush(Colors.Red)

这在运行时运行正常但我在XAML设计器模式下得到了这些令人讨厌的下划线。显然答案是在app.xaml中包含sbL1定义,但我希望这一组ui类尽可能像PnP一样,将文件夹添加到项目中并完成。那么..你能在app.xaml之外定义应用程序资源吗?还是其他一些解决方法?

1 个答案:

答案 0 :(得分:0)

您可以按如下方式在资源字典中定义所有资源:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">

<SolidColorBrush x:Key="BackgroundBrush"
                 Color="#FF171717"
                 options:Freeze="True"/>
<SolidColorBrush x:Key="ForegroundBrush"
                 Color="#FFFFFFFF"
                 options:Freeze="True"/>

</ResourceDictionary>

将该资源字典添加到应用程序级合并字典中,如下所示:

Application.Current.Resources.MergedDictionartiesApplication.Current.Resources.MergedDictionaries.Add("<Path of Resource Dictionary>")

然后在整个项目中将这些资源用作动态资源:

<Grid Background="{DynamicResource BackgroundBrush}" \>