wpf转换器文化!= en-US

时间:2016-09-09 13:26:22

标签: wpf converter uiculture

嗨,我在这里有一个非常奇怪的效果:

我有一个主窗口,其内容填充了包含表单显示的完整可视树。

要显示的第一个表单是父表单,它允许调用子表单。

当我加载子表单时,Parent基本上备份到堆栈中,然后将新内容设置为窗口。

当我关闭子表单时,备份的父表单将被设置为窗口内容,并且子窗口将被删除。

现在出现问题: 我将一组对象加载到列表框中。 列表框使用文本块来显示对象'性能  (FirstName,LastName,PhoneNumber,MobileNumber,Email),在每个文本块之后,Xaml中包含逗号以分隔条目。

但是:如果文本块为空,则不得显示相应的逗号,如下所示:

enter image description here

我设法使用转换器来完成此操作,该转换器分析要显​​示的逗号。

这项工作非常完美,但是当我显示一个子表单并将其关闭时,显示屏的逗号可见性已损坏:

enter image description here

我做了两个观察:

  1. 只有在拥有UI文化时,才会显示损坏的显示 不同形式的en-US(在我的案例中是de-DE)
  2. 我在里面放了一些痕迹 转换器代码,我看到转换器在打开后被调用 (和关闭)我使用de-DE时的子表单,但不是在我使用时 的en-US。
  3. 有什么可以导致这种影响吗?我怎么能绕过他们?

    此致

1 个答案:

答案 0 :(得分:1)

最后,我发现设置Window.Language是个问题。

我在mainwindows构造函数中执行此操作:

this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentUICulture.Name);

例如,这是正确显示数字所必需的。

但现在我发出以下块,所有文化都适用。 [在启动期间,我检查默认的Ui文化,如果我将其设置为任何其他文化,我相应地设置了App.CultureChanged]:

    if (!App.CultureChanged )
        FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
    this.Language = System.Windows.Markup.XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentUICulture.Name);