【问题标题】:WPF compile error "IDictionary must have a Key attribute"WPF 编译错误“IDictionary must have a Key attribute”
【发布时间】:2010-05-28 19:17:36
【问题描述】:

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

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

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

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

添加到 IDictionary 的所有对象 必须有一个 Key 属性或一些 其他类型的键关联 他们。

如果我为此添加一个键,例如 ResourceDictionary x:Key="x",那么会出现编译错误,但在运行应用程序时会出错。

我可以通过将原始(未指定键)“ResourceDictionary”xaml 从顶级 Grid 移动到该页面上包含的 Grid 来消除编译错误并运行应用程序。

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

谢谢

【问题讨论】:

标签: wpf styles


【解决方案1】:

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

例如,这是我创建的窗口中的 sn-p。

<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> ...

合并的字典不需要键,但该窗口的其他资源需要。

【讨论】:

  • 感谢您指出x:Key。我使用x:Name 时遇到了这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 2022-10-21
  • 2023-01-04
相关资源
最近更新 更多