是否可以使用WPF样式将货币格式应用于DataGrid单元格?

是否可以使用WPF样式将货币格式应用于DataGrid单元格?,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我有一个WPF数据网格,希望对其中几个列应用货币格式。我可以使用Binding={Binding FieldName,StringFormat={}{0:C}在每列的基础上完成这项工作,但我更愿意定义一次货币格式—大概是在资源中—并将该资源应用于需要格式化的每列 问题是,我不知道如何从样式中设置绑定的StringFormat属性。是否可以在中设置该属性或类似属性,或者我用这种方法选错了树 更新:我已成功地将样式应用于我的DataGridTextColumn中的单元格,设置单元格的ContentS

我有一个WPF数据网格,希望对其中几个列应用货币格式。我可以使用
Binding={Binding FieldName,StringFormat={}{0:C}
在每列的基础上完成这项工作,但我更愿意定义一次货币格式—大概是在
资源中—并将该资源应用于需要格式化的每列

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


更新:我已成功地将样式应用于我的DataGridTextColumn中的单元格,设置单元格的
ContentStringFormat
属性似乎是一种方法……但我在其中输入的任何值似乎都会被忽略。

您可以为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>

您可以为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>


如果您要在每列的基础上应用样式,那么应用StringFormat有什么错?我认为如果在绑定中而不是在样式中进行,阅读会更容易。可能更可读,是的。但我考虑的是扩展:假设将来我希望所有货币列都格式化当它们包含负数时,它们的文本颜色会变为红色(如财务报表上常见的).这是我希望封装在样式中的常见行为;我不希望颜色格式和货币格式在不同的位置…对于负值,我会将单元格的前景色绑定到该值,并使用转换器,返回红色表示负值。如果要应用样式在每列的基础上,使用StringFormat有什么错?我认为如果使用绑定而不是样式,阅读起来会更容易。可能更可读,是的。但我考虑的是扩展:假设将来我希望所有货币列的格式都能使它们的文本颜色在ey包含负数(如财务报表上常见).这是我希望封装在样式中的常见行为;我不希望颜色格式和货币格式在不同的位置…对于负值,我会将单元格的前景色绑定到该值,并使用转换器,返回红色表示负值。抱歉,这花了这么长时间才接受-这不是问题请给我一段时间,让我回到这个话题上来。为了封装所提到的所有内容,我可能最终会使用一个单元格模板,而不是一种样式。谢谢!对不起,这花了这么长时间才接受-我花了一段时间才回到这个话题上来。为了封装所提到的所有内容,我可能最终会使用一个单元格模板使用单元格模板,而不是样式。谢谢!