我想根据用户的偏好设置WPF应用程序的文化到一个特定的。如何在WPF应用程序中全局设置文化?
我可以通过Thread.CurrentThread.Current(UI)Culture
为当前线程做到这一点,但有什么办法可以为应用程序全局执行此操作(因此它会默认影响所有线程)?
我想根据用户的偏好设置WPF应用程序的文化到一个特定的。如何在WPF应用程序中全局设置文化?
我可以通过Thread.CurrentThread.Current(UI)Culture
为当前线程做到这一点,但有什么办法可以为应用程序全局执行此操作(因此它会默认影响所有线程)?
有没有办法将其设置为应用程序中的所有线程,但如果要创建在应用程序的线程,你可以自己为你上面
提到要设置文化来设置每个人的文化主应用程序使用下面的代码片段:
Dim newCulture As CultureInfo = new CultureInfo("fr-FR")
CurrentThread.CurrentCulture = newCulture
尝试把
<UICulture>en-US</UICulture>
...在你的csproj文件。
或者你可以试试这个:
FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(Markup.XmlLanguage.GetLanguage(Globalization.CultureInfo.CurrentCulture.IetfLanguageTag)))
或者尝试建立一个适当的附加属性这样
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);
}
}
好了,所以这是我使用以便确保所有我的应用程序是在一个美国文化。
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");
您还需要执行'System.Windows.Documents.TextElement'以捕获不从'FrameworkElement'继承的
Grhm你是什么意思? – Gilad 2014-09-24 14:09:48
我在我的应用程序中有一些部分如下:'
如何可以我设置在APP.xaml.cs?将此CultureInfo设置为该项目的任何线程? – Lai32290 2013-07-31 15:05:26