2010-03-30 60 views
3

我有一個畫筆,它是合併到Application.ResourcesResourceDictionary的一部分。WPF資源合併到Application.Resources但未在運行時解決

但由於某種原因,它在運行時未在樣式應用於某個控件時解決。但是,如果在拋出異常時從立即窗口調用Application.Current.FindResource(「BrushName」),則會找到該資源。

我錯過了什麼嗎? WPF是不是應該試圖在應用程序資源中尋找資源?

UPDATE 的應用是相當大的,所以我不能發佈的所有實際的代碼,但這裏的資源被合併和使用方式:

Brushes.xaml

<ResourceDictionary ...> 
    <SolidColorBrush x:Key="BrushName" Color="#12345678" /> 
</ResourceDictionary> 

SomeStyles.xaml

<ResourceDictionary ...> 
    <Style x:Key="SomeStyle"> 
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" /> 
    </Style> 
</ResourceDictionary> 

App.xaml

<Application ...> 
    <Application.Resources> 

    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Brushes.xaml" /> 
     <ResourceDictionary Source="SomeStyles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 


    </Application.Resources> 
</Application ...> 

然後一些控制可能使用使用資源這樣的風格:它似乎發生在菜單和在代碼中創建控件

... 
Style={StaticResource SomeStyle} 
... 

UPDATE

。它可能與這些控件和菜單不是任何窗口的可視化樹的一部分有關嗎?

+1

你可以發表一些你如何合併字典的代碼。 – 2010-03-30 08:27:35

+0

我已經在這裏複製了你的示例,它爲我構建並正確運行,看起來問題在於代碼中的其他位置。 – 2010-03-30 09:14:13

+0

任何運氣得到這個答案? – 2011-08-30 09:50:14

回答

3

你SomeStyle.xaml字典需要參考Brushes.xaml詞典直接,就像這樣:

<ResourceDictionary ...> 
    <ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="Brushes.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
    <Style x:Key="SomeStyle"> 
    <Setter Property="SomeProperty" Value="{StaticResource BrushName}" /> 
    </Style> 
</ResourceDictionary> 

StaticResources只搜索了當前字典中的樹,因此您需要傳入需要引用的任何資源。

+0

這是正確的。 – 2011-08-30 13:43:31

0

您是否在XAML標記擴展中使用DynamicResource?

你的XAML應該是{DynamicResource brushName} {不是的StaticResource brushName}

+0

DynamicResource擊中性能,AFAIK – arconaut 2010-03-30 08:34:48

+0

是的,它確實擊中了性能,但它擊中性能的原因是因爲它具有更大的查找範圍。只有當資源在編譯時在當前範圍內時,StaticResource纔會起作用,DynamicResource將執行查找運行時的範圍。性能會受到影響,但至少會起作用。 – 2010-03-30 09:04:13

+0

那麼,我明白爲什麼它打到了性能。問題是,應用程序資源應該始終處於「當前範圍」... – arconaut 2010-03-30 09:06:33