我使用动态源来更新我的文本,它适用于普通字符但是对于像中文这样的特殊字符,只有直接将它们放在xaml文件中才有效。如果动态加载它将无法工作。
<Button Style="{StaticResource DefBtn}" x:Name="button_CreateElement" Content="{DynamicResource CMMsg_5171}" Click="button_CreateElement_Click"/>
<Button Style="{StaticResource DefBtn}" x:Name="button_DeleteElement" Content="删除" Click="button_DeleteElement_Click"/>
这是如何呈现的。
正如您所看到的那样,动态加载的是错误的。
答案 0 :(得分:2)
这对我有用:
<Window ... >
<!--
<Window.Resources>
<clr:String x:Key="CMMsg_5171">删除</clr:String>
</Window.Resources>
-->
<StackPanel>
<TextBlock Text="{DynamicResource CMMsg_5171}" />
<TextBlock Text="删除" />
</StackPanel>
<强>更新强>
“从外部文件加载字符串。这样也可以吗?”
是。我添加了一个资源字典ChineseTranslations.xaml
(每种语言可以有一个),右键单击项目,添加,资源字典......
Build Action设置为'Content'和'Always Always'。
<ResourceDictionary ... xmlns:clr="clr-namespace:System;assembly=mscorlib" >
<clr:String x:Key="CMMsg_5171">删除</clr:String>
<!--more to come...-->
</ResourceDictionary>
我以下列方式将此资源字典添加到合并的字典中:
public MainWindow()
{
InitializeComponent();
LoadTranslations();
}
private void LoadTranslations()
{
string file = GetTranslationsFileForSelectedLanguage();
using (FileStream stream = File.OpenRead(file))
{
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
ResourceDictionary myResourceDictionary = (ResourceDictionary)reader.LoadAsync(stream);
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);
}
}
private string GetTranslationsFileForSelectedLanguage()
{
// todo: add selection logic for when we have more languages in the future
return "ChineseTranslations.xaml";
}