2011-03-21 54 views
1

我在Application.Resources中遇到ResourceDictionary的一些奇怪問題。 爲了在我的應用程序中填充多個ComboBox,我想將數據存儲在ResourceDictionary中。ResourceDictionary在應用程序資源中找不到

但是,我得到「找不到具有該名稱/密鑰的資源...」錯誤不斷。

我的XAML的代碼在這裏:

<Application.Resources> 
    <ResourceDictionary x:Key="RDArray"> 
     <sys:String x:Key="item1">Item1</sys:String> 
     <sys:String x:Key="item2">Item2</sys:String> 
     <sys:String x:Key="item3">Item3</sys:String> 
    </ResourceDictionary> 
</Application.Resources> 

<ListBox x:Name="lb" ItemsSource="{Binding Values, Source={StaticResource RDArray}}" /> 

由於一些幸運的情況下,我能找到的是把其他資源一樣風格以上詞典解決問題。

<Application.Resources> 
    <Style x:Key="fubar" /> 
    <ResourceDictionary x:Key="RDArray"> 
     <sys:String x:Key="item1">Item1</sys:String> 
     <sys:String x:Key="item2">Item2</sys:String> 
     <sys:String x:Key="item3">Item3</sys:String> 
    </ResourceDictionary> 
</Application.Resources> 

「bug」出現在WPF應用程序和Silverlight中。

雖然我可以使用顯示的「技巧」來解決這個問題,但我很好奇這個錯誤來自何處。我無法找到任何關於此的信息。也許這只是我和我對WPF資源的理解錯誤。

+0

您可能希望使用[x:Array](http://msdn.microsoft.com/en-us/library/ms752340.aspx)標記擴展。這使您可以在XAML中定義項目列表。 – CodeNaked 2011-03-21 12:42:10

回答

4

這是因爲如果你有一個資源字典作爲資源部分中唯一的項目,那麼內容只是被添加到父字典(我snooped,這似乎是這種情況)。爲了解決這個問題,你需要把你的資源字典在單獨的XAML文件(List.xaml在這種情況下):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:sys="clr-namespace:System;assembly=mscorlib" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary x:Key="RDArray"> 
     <sys:String x:Key="item1">Item1</sys:String> 
     <sys:String x:Key="item2">Item2</sys:String> 
     <sys:String x:Key="item3">Item3</sys:String> 
    </ResourceDictionary> 
</ResourceDictionary> 

,然後引用在你的主應用程序:

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="List.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

<ListBox x:Name="lb" ItemsSource="{Binding Values, Source={StaticResource RDArray}}"/> 
0

謝謝您回答。 在我真正的應用程序中,我創建了分隔文件,但是我沒有在其中創建第二個ResourceDictionary,只是將字符串值放在那裏。所以它看起來像:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:sys="clr-namespace:System;assembly=mscorlib" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <sys:String x:Key="item1">Item1</sys:String> 
    <sys:String x:Key="item2">Item2</sys:String> 
    <sys:String x:Key="item3">Item3</sys:String> 
</ResourceDictionary> 

所以這當然不起作用。

感謝您的回答,絕對解決了這個問題。

+0

謝謝,很高興它的工作 - 快速點爲未來 - 你需要標記答案被接受,你的'答案'應該是我的評論。它不同於論壇:) – 2011-03-22 08:46:27

相關問題