wpf 转换器文化 != en-US

wpf converter culture != en-US

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

我有一个主要的window,其中的内容充满了包含表单呈现的完整可视化树。

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

当我加载子窗体时,Parent 基本上是备份到一个堆栈中,然后将新内容设置到window。

当我关闭子窗体时,备份的父窗体被设置回 window 内容,子窗体 window 被删除。

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

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

我设法使用转换器来分析要显示的逗号。

这个工作完美,但是当我显示一个子表单并关闭它时,关于逗号可见性的显示已损坏:

我做了两个观察:

  1. 只有当我拥有 UI 文化时才会出现损坏的显示 不同形式的 en-US(在我的例子中是 de-DE)
  2. 我在 转换器代码,我看到转换器在打开后被调用 (并关闭)当我使用 de-DE 时的子窗体,但不是当我使用 zh-CN.

是否知道什么会导致这种影响?我该如何绕过它们?

此致

最后,我发现问题出在设置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);