在尝试设置默认ResourceDictionary
时,我收到以下警告:
设计人员不支持加载混合的字典 'ResourceDictionary'项目没有密钥和其他项目相同 采集。请确保“资源”属性没有 包含没有键的“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}" />
答案 0 :(得分:1)
由于您尚未发布完整的XAML文件,我怀疑除资源部分中的合并字典外还有其他资源。
根据MSDN -
在ResourceDictionary中定义资源是合法的 指定为合并字典,作为替代 指定Source,或者除了包含的任何资源之外 来自指定的来源。但是,这不是常见的情况;该 合并字典的主要方案是合并来自的资源 外部文件位置。如果要在其中指定资源 对于页面的标记,通常应该在main中定义它们 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>
答案 1 :(得分: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");