0

在尝试设置默认值时ResourceDictionary,我收到以下警告:

设计器不支持加载将没有键的“ResourceDictionary”项目与同一集合中的其他项目混合的字典。请确保“Resources”属性不包含没有键的“ResourceDictionary”项,或者“ResourceDictionary”项是集合中的唯一元素。

这是我在App.xaml文件中使用的代码,收到了上述警告:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Lang.en-US.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

这与我在 Visual Studio 2008 中设置的代码完全相同ResourceDictionary。我现在使用的是 VS 2010。Key我需要提供什么才能ResourceDictionary使其正常工作?

这是我目前正在与此代码一起测试的MainWindow.xaml中的行:

<MenuItem Header="{DynamicResource new_test}" />
4

2 回答 2

1

由于您尚未发布完整的 XAML 文件,我怀疑在您的资源部分中除了合并字典之外还有其他资源。

根据MSDN -

在指定为合并字典的 ResourceDictionary 中定义资源是合法的,可以作为指定 Source 的替代方法,也可以作为指定源中包含的任何资源的补充。但是,这不是常见的情况;合并字典的主要场景是合并来自外部文件位置的资源。如果要在页面的标记中指定资源,通常应该在主 ResourceDictionary 而不是合并字典中定义这些资源。

尝试在单独的资源字典中移动其他资源并确保所有其他资源都已x:Key设置在它们上 -

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Lang.en-US.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <ResourceDictionary>
             <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
             <ContextMenu x:Key="MyContextMenu"/>
        </ResourceDictionary>
    </ResourceDictionary>
</Application.Resources>
于 2013-11-11T19:34:21.007 回答
0

使用资源文件进行翻译。它比资源字典好。

这是一个例子:

像这样设置前缀以便在 xaml 中使用。

xmlns:const="clr-namespace:FileExplorer.Properties"

资源位于属性中。

要在 XAML 中使用它们,您将需要以下内容:

<TextBox Text="{x:Static const:Resources.Window_Title_String}"/>

如果您有不同的语言,则按照命名约定为每种语言创建自己的资源文件。

例如:

Resources.resx (this will be default)
Resources.de-DE.resx (this is for german)

现在您只需将当前文化设置为德语,您的应用程序就可以使用德语,并且将自动使用正确的资源文件。

在 Main 方法中像这样:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
于 2013-11-11T19:46:17.453 回答