2010-09-07 57 views
1

我有一个WPF DataGrid,并希望将货币格式应用于多个列。我可以使用Binding={Binding FieldName, StringFormat={}{0:C}以列为单位进行此操作,但我更愿意定义一次货币格式 - 大概在<Style>资源中 - 并将该资源应用于需要格式化的每列。可以使用WPF样式将货币格式应用于DataGrid单元格吗?

问题是,我不知道如何从样式中设置Binding的StringFormat属性。是否有可能在<Style>中设置这个或类似的属性,还是我用这种方法吠叫错误的树?

更新:我已经成功地应用了样式的细胞中我DataGridTextColumn,并设置电池的ContentStringFormat财产好像它会是要走的路......但无论价值我摆在那里似乎被忽略。

+1

如果你将要应用的风格在每列的基础,什么是错的应用的StringFormat呢?我认为如果在绑定中而不是在样式中完成,则会更容易阅读。 – Rachel 2010-09-07 17:00:35

+0

可能更具可读性,是的。但是我在扩展方面想:假设将来我希望所有货币列的格式设置为使其文本颜色在包含负值时变为红色(如财务预印本中常见的那样)。这就是我想要封装在风格中的那种常见行为;我讨厌在不同的地方使用颜色格式和货币格式...... – 2010-09-07 17:22:55

+0

在参考负值时,我会将单元格的ForeColor绑定到该值并使用Converter,并将Red返回为负值。 – benPearce 2010-09-07 22:44:31

回答

1

您可以为DataGrid单元格创建模板,并使用{TemplateBinding ContentPresenter.Content}值作为转换器参数。

我没有测试此代码,但这样的:

<ControlTemplate TargetType="{x:Type DataGridCell}" x:Key="CurrencyFormatCell"> 
    <TextBlock 
     Text="{TemplateBinding ContentPresenter.Content, Converter={StaticResource FormatCurrencyConverter}}" 
     ForeGround="{TemplateBinding ContentPresenter.Content, Converter={StaticResource CurrencyTextColorConverter}}" 
     /> 
</ControlTemplate> 
+0

对不起,这花了很长时间才接受 - 我花了一段时间才回来。为了封装所提到的所有内容,我可能会最终将使用单元格模板而不是样式。谢谢! – 2010-09-28 19:29:50