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

ql3eal8s  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(244)

我已经创建了控件样式,我想在我的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。
但我不明白这是怎么回事。任何关于问题所在的建议,我只是遗漏了一些东西或做错了一些事情。有没有更好的方式来分享风格?
谢谢

tjrkku2a

tjrkku2a1#

在该页面中是否定义了除合并的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> ...

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

dauxcl2d

dauxcl2d2#

在我的例子中,问题是不是第一个项目<Grid.Resources>,所以即使所有其他项目都定义了一个键,错误也会在编译时弹出。通过将资源字典作为资源中的第一项移动,项目将成功编译。

相关问题