Gal*_*a88 7 c# wpf datagrid triggers
我有一个datagrid包含来自a的值stored procedure.所有值都设置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>
Run Code Online (Sandbox Code Playgroud)
您不能以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)