我有以下问题,很容易重现:我正在创建一个xaml应用程序,它使用另一个文件中的资源。方法是创建一个MergedDictionaries-tag来合并本地和全局资源,如下所示:
<Window>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
<ResourceDictionary>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
....
</Window>如果你运行这一小段代码,它将崩溃:
Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border'如果我们删除MergedDictionaries-tag,代码将按预期运行:
<Window>
<Window.Resources>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</Window.Resources>
</Window>我不明白为什么当我们使用合并的资源时它会抛出异常。当然,修复现在已经足够简单了(将资源移动到一个较低的级别)。如果能知道这是不是“正常”的行为就好了……
发布于 2010-01-11 17:42:46
如果您的资源不在单独的文件中,那么它们不应该是合并字典的一部分。像这样把它们移到外面:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="path.to.xaml.file"/>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type Border}" x:Key="TypeBlock">
</Style>
<Style TargetType="{x:Type Border}" x:Key="SetBlock">
</Style>
</ResourceDictionary>
</Window.Resources>也就是说,这个错误消息有点误导人,可能是XAML编译器中的一个bug造成的。
https://stackoverflow.com/questions/2040804
复制相似问题