WPF DataGrid触发单元格内容

Gal*_*a88 7 c# wpf datagrid triggers

我有一个datagrid包含来自a的值stored procedure.所有值都设置BoldFontWeight.

当单元格内容等于0时,我想使文本正常.

我怎么能用触发器做到这一点?

我已经像下面这样做但它不起作用:

<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <Trigger Property="Content" Value="0">
                    <Setter Property="FontWeight" Value="Normal"/>
                </Trigger>
            </Style.Triggers>
    </Style>
</DataGrid.CellStyle>
Run Code Online (Sandbox Code Playgroud)

Bah*_*ies 9

您不能以DataGridCell.Content这种方式访问,DataTrigger而是根据您的DataGrid.SelectedItem.YourProperty喜好使用:

    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding YourProperty}" Value="0">
                    <Setter Property="FontWeight" Value="Normal"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
Run Code Online (Sandbox Code Playgroud)

编辑:

假设您DataGridColumns是基于文本的,那么您可以使用IValueConverter如下:

请注意,如果某些数据网格列不是基于文本的,则此解决方案仍适用于那些列.

XAML:

<Window.Resources>
    <local:FontWeightConverter x:Key="fontWeightConverter"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

...

    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Setters>
                <Setter Property="FontWeight" 
                       Value="{Binding RelativeSource={RelativeSource Self}, 
                       Path=Content.Text, 
                       Converter={StaticResource fontWeightConverter}}" />
            </Style.Setters>
        </Style>
    </DataGrid.CellStyle>
Run Code Online (Sandbox Code Playgroud)

转换器:

public class FontWeightConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        if (value != null && value.ToString() == "0")
            return FontWeights.Normal;
        return FontWeights.Bold;
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)