我正在使用WPF应用程序,该应用程序应该是多语言的。 所以我按照这个article中的步骤添加了一些资源词典到我的项目中。 然后我通过以下方法将这些词典中的一个添加到窗口中,我在窗口的构造函数中调用 - 用于测试目的:
private void SetLanguageDictionary()
{
ResourceDictionary dict = new ResourceDictionary();
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "en-US":
case "en-GB":
dict.Source = new Uri("Resources\\StringResources_en-US.xaml",
UriKind.Relative);
break;
case "de-DE":
dict.Source = new Uri("Resources\\StringResources_de-DE.xaml",
UriKind.Relative);
break;
default:
dict.Source = new Uri("Resources\\StringResources_de-DE.xaml",
UriKind.Relative);
break;
}
Resources.MergedDictionaries.Add(dict);
}
最后,我在窗口上的标签中实现了这样的资源:
<Label Grid.Row="0"
Grid.Column="0"
Margin="5"
Content="{DynamicResource firstname}"></Label>
如果我电脑上的当前文化是&#34; en-US&#34;内容将是&#34;名字&#34;。 或者在&#34; de-DE&#34; (德语)&#34; Vorname&#34;。
在运行时它工作正常,但在设计时我无法看到文本。
我该怎么办?
答案 0 :(得分:0)
我找到了。
我必须在Window.Resources中实现ResourceDictionary。 为此,必须添加一些标签(“ResourceDictionary”,“ResourceDictionary.MergedDictionaries”)。
如果定义了样式,则必须将它们移动到标记“ResourceDictionary”中,如下所示。
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/StringResources_en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="style1">
[...]
</Style>
[...]
</ResourceDictionary>
</Window.Resources>
然后您可以在控件中看到xaml文件中的文本作为动态资源绑定到它。 因为它被用作动态资源,所以可以在代码隐藏中覆盖它:
ResourceDictionary dict = new ResourceDictionary();
dict.Source = new Uri("Resources\\StringResources_de-DE.xaml",
UriKind.Relative);
Resources.MergedDictionaries.Add(dict);