我有一个奇怪的行为,将数据从DataView
加载到DataGrid
。我有一个自定义的DataGridBoundColumn
和一个ContentTemplateSlector
。选择器工作得很好,但由于列直接接收值DateTime
,所以我不指定属性,只指定Binding
。
DateTime.StringFormat
的d
没有任何作用,但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";标准日期和时间格式说明符。