У меня есть 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 ould вызовите мой метод ProvideValue(IServiceProvider serviceProvider)
, и поэтому я бы привязывался к моему ресурсу.string из MyText.
Теперь, когда у меня есть несколько языков, я пытаюсь сделать то же самое, используя мой GlobalTranslator
. я мог бы добавить ссылку на мои GlobalTranslator.Instance
делая
<Window.Resources>
<x:StaticExtension Member="Core:GlobalTranslator.Instance" x:Key="MyGlobalTranslator"/>
</Window.Resources>
, но я не могу найти способ сделать что-то вроде
Content="{MyGlobalTranslator.Translator Text=MyText}"
я все еще могу это сделать в коде позади
MyButton.Content = GlobalTranslator.Instance.Translator.ProvideValue("MyText");
Но хотелось бы знать, есть ли способ сделать это в xaml.