Как можно глобально установить Культуру в приложении WPF?
Я хотел бы установить Культуру приложения WPF на конкретную, основанную на пользовательских настройках.
Я могу сделать это для текущего потока через Thread.CurrentThread.Current(UI)Culture
, но есть ли способ сделать это глобально для приложения (поэтому он влияет на все потоки по умолчанию)?
Ответы
Ответ 1
нет способа установить его для всех потоков в приложении, однако, если вы создаете потоки в своем приложении, вы можете установить культуру для всех самостоятельно, как вы упомянули выше.
Чтобы установить Культуру в основное приложение, используйте следующий код фрагмента:
Dim newCulture As CultureInfo = new CultureInfo("fr-FR")
CurrentThread.CurrentCulture = newCulture
Ответ 2
Попробуйте поставить
<UICulture>en-US</UICulture>
... в вашем файле csproj.
Ответ 3
ok, поэтому я использую это, чтобы убедиться, что все мое приложение находится в культуре в США.
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
XmlLanaguage lang = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(lang));
FrameworkContentElement.LanguageProperty.OverrideMetadata(typeof(System.Windows.Documents.TextElement), new FrameworkPropertyMetadata(lang));
чтобы сделать один поток в культуре, который вы можете сделать
Thread.CurrentThread.CurrentCulture = new CultureInfo("EN-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("EN-US");
Ответ 4
Или вы можете попробовать следующее:
FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(Markup.XmlLanguage.GetLanguage(Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)))
Ответ 5
Или попробуйте создать подходящее Attached Property, подобное этому
public class CultureHelper : DependencyObject
{
public string Culture
{
get { return (string)GetValue(CultureProperty); }
set { SetValue(CultureProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CultureProperty =
DependencyProperty.RegisterAttached("Culture", typeof(string), typeof(CultureHelper), new FrameworkPropertyMetadata("en", CultureChanged));
private static void CultureChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//For testing purposes in designer only
if (DesignerProperties.GetIsInDesignMode(d))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo((string)e.NewValue);
}
}
public static void SetCulture(DependencyObject element, string value)
{
element.SetValue(CultureProperty, value);
}
public static string GetCulture(DependencyObject element)
{
return (string)element.GetValue(CultureProperty);
}
}