【发布时间】:2021-06-29 14:38:18
【问题描述】:
有没有什么方法可以在我的 WPF 应用程序中独立于 CultureInfo 为所有 DateTime 对象全局设置 StringFormat?
我在整个应用程序中使用对此类对象的绑定,如下所示:
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
并且我想避免将StringFormat 参数添加到每个绑定。
我试图覆盖当前的文化DateTimeFormat 参数,如下所示:
public void SetDateTimeFormat()
{
culture = Thread.CurrentThread.CurrentUICulture;
var newCulture = new CultureInfo(culture.Name);
// Set desired date format here
newCulture.DateTimeFormat.ShortDatePattern = "dd/MMM/YYYY";
newCulture.DateTimeFormat.LongDatePattern = "dd/MMM/YYYY";
newCulture.DateTimeFormat.ShortTimePattern = "dd/MMM/YYYY";
newCulture.DateTimeFormat.LongTimePattern = "dd/MMM/YYYY";
newCulture.DateTimeFormat.FullDateTimePattern = "dd/MMM/YYYY";
CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(System.Windows.Markup.XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
var lang = System.Windows.Markup.XmlLanguage.GetLanguage(newCulture.IetfLanguageTag);
FrameworkContentElement.LanguageProperty.OverrideMetadata(
typeof(System.Windows.Documents.TextElement),
new FrameworkPropertyMetadata(lang)
);
}
但它不起作用
【问题讨论】:
-
这不是那个问题的重复。我的问题是显示 DateTime 绑定的标签没有检查 DateTimeFormat 模式,或者我的模式设置不正确。另外,我的格式不应该依赖于当前的文化。
-
覆盖当前
CultureInfo中的内容是一个绝对可怕的想法,可能会在完全出乎意料的地方爆炸。不仅你在改变全局变量,你也在改变别人的全局变量——在这种情况下,是框架的。 -
Ok @AntonTykhyy 那么ai如何做到这一点?
-
使用如下@mm8 建议的自定义绑定。
标签: c# wpf datetime datetime-format cultureinfo