基于DataGridCell值类型的WPF触发器



我正在尝试的是

<local:class_converter_data_type x:Key="DataTypeConverter"/>
<Style TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource DataTypeConverter}}" Value="{x:Type sys:DateTime}">
<Setter Property="FontStyle" Value="Italic" />
</DataTrigger>
</Style.Triggers>
</Style>

public class class_converter_data_type : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.GetType() ?? Binding.DoNothing;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

我在这里犯了什么错误?绑定格式有任何错误或转换?

你不应该这样做。DataGridCell不直接包含底层数据类型的任何类型信息。最干净的方法是监听DataGrid.AutoGeneratingColumn事件并配置列内容的外观:

MainWindow.xaml

<DataGrid AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />

MainWIndow.xaml.cs

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var dataGrid = sender as DataGrid;
if (e.PropertyType.Equals(typeof(DateTime)) 
&& e.Column is DataGridTextColumn column)
{
column.FontStyle = FontStyles.Italic;
}
}

如果你不自动生成列,你可以通过设置DataGridTextColumn.FontStyleXAML属性来设置字体样式。

<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn FontStyle="Italic" />
</DataGrid.Columns>
</DataGrid>

相关内容

  • 没有找到相关文章

最新更新