Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元格内容上的WPF DataGrid触发器_C#_Wpf_Datagrid_Triggers - Fatal编程技术网

C# 单元格内容上的WPF DataGrid触发器

C# 单元格内容上的WPF DataGrid触发器,c#,wpf,datagrid,triggers,C#,Wpf,Datagrid,Triggers,我有一个datagrid,其中包含的值来自存储过程。所有值均设置为Bold为FontWeight 当单元格内容等于0时,我希望使文本正常。 我怎么能用扳机呢 我做了如下操作,但不起作用: <DataGrid.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="FontWeight" Value="Bold" /> <Style

我有一个
datagrid
,其中包含的值来自
存储过程。所有值均设置为
Bold
FontWeight

当单元格内容等于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>

这是一种定义该列的方法:

  <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
              <DataTemplate>
                   <StackPanel Orientation="Horizontal">
                            <TextBox Text="{Binding DataBaseValue}"/>
                   </StackPanel>
             </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>


您可以在文本框的FontWeights上添加一个绑定,该绑定带有一个与文本相关联的转换器,如果文本本身是这样的话。

您不能访问
DataGridCell.Content
,这样,就可以根据
DataGrid使用
DataTrigger
。选择EdItem.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>

你可以这样做-

<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Content.Text, Mode=OneWay, RelativeSource={RelativeSource Self}}" Value="0">
                    <Setter Property="FontWeight" Value="Normal"/>
                </Trigger>
            </Style.Triggers>
    </Style>
</DataGrid.CellStyle>


我有12列。我不想为所有列复制此代码。听起来不错,但我需要为对象的所有属性复制此代码。我不想复制12倍于我确信工作完美的代码。你的编辑工作。因此,我认为只有在XAML中才能实现这一点。是吗?我99%肯定没有;)
    <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>
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();
    }
}
<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
            <Setter Property="FontWeight" Value="Bold" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Content.Text, Mode=OneWay, RelativeSource={RelativeSource Self}}" Value="0">
                    <Setter Property="FontWeight" Value="Normal"/>
                </Trigger>
            </Style.Triggers>
    </Style>
</DataGrid.CellStyle>