【问题标题】:Can a WPF Style be used to apply currency formatting to a DataGrid cell?可以使用 WPF 样式将货币格式应用于 DataGrid 单元格吗?
【发布时间】:2010-09-07 16:54:17
【问题描述】:

我有一个 WPF DataGrid 并希望将货币格式应用于几个列。我可以使用 Binding={Binding FieldName, StringFormat={}{0:C} 在每列的基础上执行此操作,但我更愿意定义一次货币格式 - 大概在 <Style> 资源中 - 然后将该资源应用于需要格式化的每一列。

问题是,我不知道如何从样式中设置绑定的 StringFormat 属性。是否可以在<Style> 中设置该属性或类似属性,还是我用这种方法找错了树?

更新:我已成功将样式应用于 DataGridTextColumn 中的单元格,并且设置单元格的 ContentStringFormat 属性似乎是可行的方法......但是我放在那里的任何价值似乎都被忽略了。

【问题讨论】:

  • 如果您要按列应用样式,那么应用 StringFormat 有什么问题?我认为如果在绑定中而不是在样式中完成,它会更容易阅读。
  • 可能更具可读性,是的。但我正在考虑扩展:假设将来我希望所有货币列的格式为当它们包含负数时它们的文本颜色变为红色(如财务预表中常见的那样)。这就是我想要封装在一种风格中的常见行为;而且我讨厌在不同的地方使用颜色格式和货币格式...
  • 在参考负值时,我会将单元格的 ForeColor 绑定到该值并使用转换器,返回 Red 作为负值。

标签: wpf xaml datagrid


【解决方案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>

【讨论】:

  • 很抱歉,我花了这么长时间才接受 - 我花了一段时间才回到这个问题上。为了封装所有提到的内容,我可能最终使用单元格模板,而不是样式。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多