2013-01-04 38 views
2

我有两个字典的问题:的XAML MergedDictionaries不能找到eachothers资源

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Styles1.xaml"/> 
    <ResourceDictionary Source="Styles2.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

当我设置在第一字典一个资源,例如颜色。 然后它不会在第二个字典中找到它?

第一:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Color x:Key="ApplicationPageBackgroundColor">#FFFFFFFF</Color> 
    <SolidColorBrush x:Key="ApplicationPageBackgroundColorBrush" Color="{StaticResource ApplicationPageBackgroundColor}" /> 
</ResourceDictionary> 

二:(setter属性= “背景” 的价值....产生错误)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="LayoutRootStyle" TargetType="Panel"> 
     <Setter Property="Background" Value="{StaticResource ApplicationPageBackgroundColorBrush}" /> 
    </Style> 
</ResourceDictionary> 

如果我把它们放在它的作品,有什么建议相同的字典?

+0

所以你想循环你的引用循环依赖? –

+0

不是循环的,而是一种依赖方式 –

回答

0

Styles2.xaml没有提及Styles1.xaml,反之亦然。对于StaticResource工作,字典条目必须在使用点(“范围内”)中静态可见。以同样的方式,您不能引用稍后在同一个XAML文件中定义的资源。

在WPF中,DynamicResource可能会做你想做的事,但这在WinRT中不可用。您必须将第一个资源合并到第二个资源(并且没有任何循环依赖),或者将共享部分放置在两个可见的地方(例如Application.Resources)。

+0

感谢您的解释。我想要的是将我的巨大资源词典拆分为多个词典,首先从控件中分离我用过的科罗托盘。因此,科洛勒尔字典必须可供所有其他字典访问,而不是反向。我宁愿将app.xaml留空。 –

+0

任何建议如何共享1字典给所有其他? –

+0

您可以将它合并为全部显式合并字典,尽管取决于多大/经常会对性能产生一些影响。对于常见的颜色等,这似乎是一个很好的打赌给我。或者,如果它真的在任何地方使用,请将它放在app.xaml中,这就是它的用途。 –