我写了一个小实用程序,用户可以在其中更改语言。我将可用语言(如 CultureInfo
)放在 List<CultureInfo>
中, 将其绑定(bind)到组合框并使用 DisplayMemberPath
指向 CultureInfo.DisplayName
.
private List<CultureInfo> languageOptions = new List<CultureInfo>();
public List<CultureInfo> LanguageOptions
{
get { return languageOptions; }
set
{
languageOptions = value;
OnPropertyChanged("LanguageOptions");
}
}
在我的构造函数中;
foreach (/* my available languages */)
{
cultures.Add(new CultureInfo(/* language ie.e en-US, de-DE etc */));
}
我使用以下 XAML 来显示所选语言:
<ComboBox x:Uid="ComboBox_3"
ItemsSource="{Binding LanguageOptions}"
DisplayMemberPath="DisplayName"
SelectedItem="{Binding Source={x:Static properties:Settings.Default},
Path=SelectedCulture}"/>
当 CurrentCulture 和 CurrentUICulture 设置为 en-US 时,这非常有效。
当用户选择一种新语言并重新启动实用程序时,我设置了 CurrentCulture
和 CurrentUICulture
对于 App.xaml.cs 中的应用程序,如下所示:
if ((TTSAutomate.Properties.Settings.Default.SelectedCulture)!=null)
{
CultureInfo ci = TTSAutomate.Properties.Settings.Default.SelectedCulture;
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
}
这非常有效,因为该实用程序以正确的语言显示。
但是,显示所选语言的组合框现在只显示 Name
CultureInfo 的,而不是 DisplayName
.
任何人都可以就发生的事情提出建议吗?我试过了 NativeName
相反,没有任何改进
最佳答案
我重新生成了几次附属程序集(没有做任何更改),然后绑定(bind)“突然”开始工作了:(
关于c# - 组合框中的 WPF CultureInfo,DisplayName 作为 DisplayMemberPath 在更改 SelectedUICulture 时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359815/