【问题标题】:wpf converter culture != en-USwpf 转换器文化!= en-US
【发布时间】:2016-09-09 13:26:21
【问题描述】:

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

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

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

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

当我关闭子窗体时,备份的父窗体被设置为窗口内容,子窗体被丢弃。

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

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

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

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

我做了两个观察:

  1. 只有当我有 UI 文化时才会出现损坏的显示 不同形式的 en-US(在我的情况下为 de-DE)
  2. 我在 转换器代码,我看到转换器在打开后被调用 (并关闭)我使用 de-DE 时的子表单,但在我使用时没有 zh-CN。

有什么想法会导致这种影响吗?以及如何绕过它们?

问候

【问题讨论】:

    标签: wpf converter uiculture


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多