Триггер WPF DataGrid для содержимого ячейки
у меня есть datagrid
чем содержит значение происходит от stored procedure
. Все значения Bold
as 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>
3 ответов
вы не можете получить доступ 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>
EDIT:
предполагая, что DataGridColumns
являются текстовыми, то вы можете использовать IValueConverter
как показано ниже:
обратите внимание, что если некоторые столбцы сетки данных не основаны на тексте, это решение все еще работает для тех столбцов, которые являются.
Xaml:
<Window.Resources>
<local:FontWeightConverter x:Key="fontWeightConverter"/>
</Window.Resources>
...
<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();
}
}
Это способ определить этот столбец:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding DataBaseValue}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
вы можете добавить привязку к FontWeightof текстового поля с преобразователем, связанным с текстом, если сам.
вы могли бы сделать это -
<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>