我有一个WPF应用程序,我使用资源文件使其成为多语言。
像这样:
private void Application_Startup(object sender, StartupEventArgs e)
{
try
{
var lang = new Uri("pack://siteoforigin:,,,/Languages/" + Settings.Default.Language + ".xaml", UriKind.RelativeOrAbsolute);
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = lang });
}
catch
{
this.Resources.MergedDictionaries.Clear();
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("..\\Languages\\English.xaml", UriKind.RelativeOrAbsolute) });
}
}
因此,对于任何显示文本的标签,我将它们设置为:
<TextBlock Text="{DynamicResource DYouKnow}"/>
这在运行时效果很好但在设计时我没有在标签上看到我的默认文本,这使得设计/维护UI变得很困难。
还有另一种方法吗?
答案 0 :(得分:0)
使用MarkupExtension,您可以创建一个可以在XAML中使用的扩展,它也将提供设计时文本。
您可以按如下方式使用它:
<TextBlock loc:TranslateExtension.Key="txtTextKey" Text="{loc:TranslateExtension Default='Default text'}" />
请参阅以下教程: http://www.wpftutorial.net/localizemarkupextension.html
答案 1 :(得分:0)
在InitializeComponent()
调用后,在您的View构造函数中尝试以下内容:
if (DesignerProperties.GetIsInDesignMode(this))
this.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("..\\Languages\\English.xaml", UriKind.RelativeOrAbsolute) })
..将XAML URI调整为当前View文件的特定文件夹位置。