区域性不变StringFormat不起作用



我有一个奇怪的行为,将数据从DataView加载到DataGrid。我有一个自定义的DataGridBoundColumn和一个ContentTemplateSlector。选择器工作得很好,但由于列直接接收值DateTime,所以我不指定属性,只指定Binding

DateTime.StringFormatd没有任何作用,但dd/MM/yyyy工作得很好。Double的问题相同。甚至尝试过{}{0:D},但{##0.00##}运行良好。

有关于这种奇怪行为的线索吗?

protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
Binding binding = new Binding((Binding).Path.Path(){Source= dataItem};
ContentControl content= new ContentControl
{
ContentTemplateSelector = (TableDataPointConvert)cell.FindResource("TemplateSelector")
};
content.SetBinding(ContentControl.ContentProperty, binding);

选择器:

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if(item is DateTime)
{
return DateTemplate;
}
}

不起作用的xaml部分:

<DataTemplat x:Key="DateTemplate">
<TextBlock Text="{Binding StringFormat=d}"/>
</DataTemplate>

有效:

<DataTemplat x:Key="DateTemplate">
<TextBlock Text="{Binding StringFormat=dd/MM/yyyy}"/>
</DataTemplate>

谢谢你,

Double的问题相同。甚至尝试过{}{0:D},但{##0.00##}运行良好。

D/d格式说明符仅适用于积分类型,而不适用于double,请改用F/f,例如:

StringFormat=F
StringFormat={}{0:F}}
StringFormat=F0
StringFormat={}{0:F0}}
...

;d";DateTime的。StringFormat没有任何作用,但是dd/MM/yyyy可以正常工作。

我认为你混淆了两个概念。StringFormat中使用的d(如下(是一个标准格式说明符,它将格式化日期以使用短日期模式,如6/15/2009(en-US(,请参阅文档。

StringFormat=d
StringFormat={}{0:d}

另一方面,下面的字符串格式是一种自定义格式,其中d有不同的含义,代表一个月中的哪一天。

StringFormat={}{0:MM/dd/yy H:mm:ss zzz}}

令人困惑的是,你不能像上面那样只使用d,并期望它是一个月的哪一天,因为它将被解释为标准格式说明符。

如果;d";格式说明符在没有其他自定义格式说明符的情况下使用,它被解释为";d";标准日期和时间格式说明符。

相关内容

  • 没有找到相关文章

最新更新