嵌套属性我有一个Singleton
类XAML绑定到的单
public sealed class GlobalTranslator
{
public Translator Translator = new Translator();
static readonly GlobalTranslator INSTANCE = new GlobalTranslator();
private GlobalTranslator()
{
}
public static GlobalTranslator Instance
{
get
{
return INSTANCE;
}
}
}
,让我来定义文化为我Translator
类
public class Translator : MarkupExtension
{
readonly CultureInfo Ci;
const string ResourceId = "LDVELH_WPF.Resources.Strings";
public Translator()
{
Ci = Thread.CurrentThread.CurrentCulture;
}
public Translator(String language)
{
switch (language.ToLower())
{
case "french":
Ci = new CultureInfo("fr-FR");
break;
case "english":
Ci = new CultureInfo("en-GB");
break;
default:
Ci = new CultureInfo("en-GB");
break;
}
}
public Translator(SupportedLanguage language)
{
switch (language)
{
case SupportedLanguage.French:
Ci = new CultureInfo("fr-FR");
break;
case SupportedLanguage.English:
Ci = new CultureInfo("en-GB");
break;
default:
Ci = new CultureInfo("en-GB");
break;
}
}
public string Text
{
get;
set;
}
override public object ProvideValue(IServiceProvider serviceProvider)
{
if (Text == null)
return "";
ResourceManager Resmgr = new ResourceManager(ResourceId
, typeof(Translator).GetTypeInfo().Assembly);
return Resmgr.GetString(Text, Ci);
}
public string ProvideValue(string stringToTranslate)
{
Text = stringToTranslate;
if (Text == null)
return "";
ResourceManager Resmgr = new ResourceManager(ResourceId
, typeof(Translator).GetTypeInfo().Assembly);
return Resmgr.GetString(Text, Ci);
}
}
我以前的时候只用我的翻译类,我可以这样绑定:
Content="{Core:Translator Text=MyText}"
设置我的文本属性w应该打电话给我的ProvideValue(IServiceProvider serviceProvider)
方法,所以我会绑定我MyText的resource.string。
既然我有多种语言,我正在尝试使用我的GlobalTranslator
来做同样的事情。 我可以做
<Window.Resources>
<x:StaticExtension Member="Core:GlobalTranslator.Instance" x:Key="MyGlobalTranslator"/>
</Window.Resources>
的引用添加到我的GlobalTranslator.Instance
,但我似乎无法找到一种方法做一些像
Content="{MyGlobalTranslator.Translator Text=MyText}"
我还是能做到这一点在后面的代码由
MyButton.Content = GlobalTranslator.Instance.Translator.ProvideValue("MyText");
但想知道是否有办法在xaml中做到这一点。