2013-01-04 59 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中,這就是它的用途。 –