WPF编译错误“IDictionary必须具有Key属性”

时间:2010-05-28 19:17:37

标签: wpf styles

我已经在我的WPF应用程序中创建了多个xaml页面中使用的控件样式。为此,我创建了一个Resources.xaml并在那里添加了样式。

然后在我的页面中添加此代码

<Grid.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/SampleEventTask;component/Resources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Grid.Resources>

在两个页面上,这可以正常工作,但在第3页上,我收到一个编译错误,上面写着:

  

所有对象都添加到IDictionary中   必须有一个Key属性或一些   与之相关的其他类型的密钥   它们。

如果我添加一个密钥,就像这样的ResourceDictionary x:Key =“x”,那么编译错误就会发生,但是在运行应用程序时它会错误地找到样式。

我可以让编译错误消失,只需将原始(未指定密钥)“ResourceDictionary”xaml从顶级Grid移动到该页面上的包含Grid中,即可运行应用程序。

但我不明白这里发生了什么。关于问题是什么的任何建议,我只是错过了什么或做错了什么。有没有更好的方式来分享风格?

感谢

1 个答案:

答案 0 :(得分:6)

除了该页面中合并的ResourceDictionary之外,是否还定义了其他任何资源?

例如,这是我创建的一个窗口的片段。

<Window x:Class="SelectionPagePrototype.SelectionPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SelectionPagePrototype"
    Title="SelectionPage" MinHeight="600" MinWidth="800" Loaded="OnLoaded">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ImageResourceDictionary.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <local:QuickPickCheckedConverter x:Key="quickPickConverter" />
            <local:BoolToCaptionConverter x:Key="captionConverter" />
            <local:ProductAndImageTypeConverter x:Key="imageConverter" />
        </ResourceDictionary>
    </Window.Resources>
    <Grid> ...

合并的字典不需要密钥,但该窗口的其他资源可以使用。