0

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

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

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

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

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

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

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

在此处输入图像描述

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

这工作得很好,但是当我显示一个子窗体并关闭它时,显示在逗号可见性方面已损坏:

在此处输入图像描述

我做了两个观察:

  1. 仅当我的 UI Culture 与 en-US 不同(在我的情况下为 de-DE)时,才会发生损坏的显示
  2. 我在转换器代码中放置了一些痕迹,我看到在我使用 de-DE 时打开(和关闭)子窗体后调用了转换器,但在我使用 en-US 时却没有。

有什么想法会导致这种影响吗?我怎样才能绕过它们?

问候

4

1 回答 1

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);
于 2016-09-12T10:15:13.170 回答