wpf资源:resourcedictionary和xmlDataProvider

时间:2011-12-08 11:45:58

标签: wpf resources

我遇到了在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>

有谁知道我必须做些什么来避免错误消息? 谢谢!

1 个答案:

答案 0 :(得分:1)

必须为放置在ResourceDictionary中的任何对象分配一个键。 WPF使用此密钥来隐式地(例如通过默认样式)或显式地(例如通过StaticResourceDynamicResource)检索对象。

在上面的示例中,您创建了一个没有密钥的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>自己定义了一个新的第二个字典(没有键),可以添加到外部字典中。

希望这有帮助!