我遇到了在XAML文件的资源部分中使用两种不同资源定义的问题:
这会引发错误:
<Window.Resources>
<XmlDataProvider x:Key="Maschinen">
<x:XData xmlns="">
<machines>
<machine name="alte Maschine"/>
<machine name="neue Maschine"/>
</machines>
</x:XData>
</XmlDataProvider>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ShinyRed.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
这也是:
<Window.Resources>
<XmlDataProvider x:Key="Maschinen">
<x:XData xmlns="">
<machines>
<machine name="alte Maschine"/>
<machine name="neue Maschine"/>
</machines>
</x:XData>
</XmlDataProvider>
<ResourceDictionary Source="ShinyRed.xaml"/>
</Window.Resources>
有谁知道我必须做些什么来避免错误消息? 谢谢!
答案 0 :(得分:1)
必须为放置在ResourceDictionary
中的任何对象分配一个键。 WPF使用此密钥来隐式地(例如通过默认样式)或显式地(例如通过StaticResource
,DynamicResource
)检索对象。
在上面的示例中,您创建了一个没有密钥的ResourceDictionary
,因此出现了错误。您正在寻找的语法是:
<Window.Resources>
<ResourceDictionary> <!-- Create a resource dictionary here -->
<XmlDataProvider x:Key="Maschinen"> <!-- Put this into the dictionary -->
<x:XData xmlns="">
<machines>
<machine name="alte Maschine"/>
<machine name="neue Maschine"/>
</machines>
</x:XData>
</XmlDataProvider>
<ResourceDictionary.MergedDictionaries> <!-- Merge into this dictionary another dictionary ... -->
<ResourceDictionary Source="ShinyRed.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
请注意,如果您将其删除,则上面代码段中的第一个ResourceDictionary
标记是隐式的。因此,在原始示例中,标记<ResourceDictionary>
自己定义了一个新的第二个字典(没有键),可以添加到外部字典中。
希望这有帮助!