我的WPF应用程序中有DataGrid
视图,它从任何给定的数据库加载任何给定表的数据。现在我想将表格内容的所有数值转换为千位分隔符。
<DataGrid BorderBrush="Black" Background="White" Margin="10,0,10,10" FontSize="18" BorderThickness="1,0,1,1" RowHeaderWidth="0" x:Name="preview" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" IsTextSearchEnabled="True" IsTextSearchCaseSensitive="False" IsReadOnly="True" CanUserSortColumns="False" FontFamily="Arial" >
<DataGrid.Resources>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentStringFormat" Value="{Binding StringFormat={}{0:N}}"/>
</Style>
</DataGrid.Resources>
</DataGrid>
但这并没有影响。实现它的正确方法是什么?
答案 0 :(得分:0)
没有implcit样式可以应用于DataGrid
的所有列的所有绑定。
您必须在每个单独的绑定上设置StringFormat
属性。如果明确定义列,则可以在XAML标记中执行此操作,例如:
<DataGrid x:Name="dg" AutoGenerateColumns="False" xmlns:s="clr-namespace:System;assembly=mscorlib">
<DataGrid.Resources>
<s:String x:Key="format">{0:N}</s:String>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="num" Binding="{Binding Num, StringFormat={StaticResource format}}" />
<DataGridTextColumn Header="num" Binding="{Binding Num2, StringFormat={StaticResource format}}" />
</DataGrid.Columns>
</DataGrid>
或者您可以处理AutoGeneratingColumn
事件,例如:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridTextColumn col = e.Column as DataGridTextColumn;
if (col != null && e.PropertyType == typeof(decimal) || e.PropertyType == typeof(double))
{
col.Binding = new Binding(e.PropertyName) { StringFormat = "{0:N}" };
}
}