我的Application.Resources中的ResourceDictionary面临一些奇怪的问题。 为了在我的应用程序中填充多个ComboBox,我想将数据存储在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 :(得分:4)
这是因为如果你有一个资源字典作为资源部分中的唯一项目,那么内容只是被添加到父字典(I 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}}"/>
答案 1 :(得分: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>
所以这当然也不起作用。
感谢您的回答,绝对解决了这个问题。