wpf 转换器文化 != en-US
wpf converter culture != en-US
嗨,我这里有一个非常奇怪的效果:
我有一个主要的window,其中的内容充满了包含表单呈现的完整可视化树。
要显示的第一个窗体是父窗体,它允许调用子窗体。
当我加载子窗体时,Parent 基本上是备份到一个堆栈中,然后将新内容设置到window。
当我关闭子窗体时,备份的父窗体被设置回 window 内容,子窗体 window 被删除。
现在问题来了:
我将一组对象加载到列表框中。
列表框使用文本块来显示对象的属性
(FirstName, LastName, PhoneNumber,MobileNumber, Email),在每个文本块之后,Xaml 中包含一个逗号来分隔条目。
但是:如果文本块为空,则不得显示相应的逗号,如下所示:
我设法使用转换器来分析要显示的逗号。
这个工作完美,但是当我显示一个子表单并关闭它时,关于逗号可见性的显示已损坏:
我做了两个观察:
- 只有当我拥有 UI 文化时才会出现损坏的显示
不同形式的 en-US(在我的例子中是 de-DE)
- 我在
转换器代码,我看到转换器在打开后被调用
(并关闭)当我使用 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);
嗨,我这里有一个非常奇怪的效果:
我有一个主要的window,其中的内容充满了包含表单呈现的完整可视化树。
要显示的第一个窗体是父窗体,它允许调用子窗体。
当我加载子窗体时,Parent 基本上是备份到一个堆栈中,然后将新内容设置到window。
当我关闭子窗体时,备份的父窗体被设置回 window 内容,子窗体 window 被删除。
现在问题来了: 我将一组对象加载到列表框中。 列表框使用文本块来显示对象的属性 (FirstName, LastName, PhoneNumber,MobileNumber, Email),在每个文本块之后,Xaml 中包含一个逗号来分隔条目。
但是:如果文本块为空,则不得显示相应的逗号,如下所示:
我设法使用转换器来分析要显示的逗号。
这个工作完美,但是当我显示一个子表单并关闭它时,关于逗号可见性的显示已损坏:
我做了两个观察:
- 只有当我拥有 UI 文化时才会出现损坏的显示 不同形式的 en-US(在我的例子中是 de-DE)
- 我在 转换器代码,我看到转换器在打开后被调用 (并关闭)当我使用 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);