在WPF中,如何在ResourceDictionaries之间交叉引用资源?

时间:2010-10-28 10:36:56

标签: wpf xaml resourcedictionary

我在一个带有许多UserControls的WPF项目上工作,我试图在我的WPF资源中加入一些理智。

基本文件包含所有视图所需的通用内容,例如颜色:

<!-- Resources.xaml -->
<Color x:Key="FlashOrange">#F59500</Color>

然后,特定于视图的资源文件需要引用FlashOrange:

<!-- ContactViewResources.xaml -->
<DataTrigger Binding="{Binding IsActiveConversation}" Value="True">
    <Setter Property="Background" Value="{StaticResource FlashOrange}"/>
</DataTrigger>

最后,我想在我的UserControl中“包含”两者。不幸的是,通过这种方法,我得到了一个关于{StaticResource FalshOrange}没有被定义的例外。

<!-- ContactView.xaml -->
<UserControl.Resources>        
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="..\Resources.xaml"/>
            <ResourceDictionary Source="ContactViewResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>     
</UserControl.Resources>

所有视图文件都在同一个DLL程序集中,并且运行单独的EXE程序集

谢谢!

2 个答案:

答案 0 :(得分:2)

将Resources.xaml合并到ContactViewResources.xaml中,因此静态引用在加载时在其资源树中具有指向FlashOrange的直接路径,或者使用DynamicResource。

答案 1 :(得分:1)

要在另一个ResourceDictionary中引用一个ResourceDictionary,请使用要保存引用的ResourceDictionary的MergedDictionary属性。在你的情况下:

<!-- ContactViewResources.xaml -->
<ResourceDictionary ...>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="..\Resources.xaml"/>
    </ResourceDictionary.MergedDictionaries>  
    ...  
</ResourceDictionary>