繁体   English   中英

WPF 基于DataGridCell值类型的触发器

[英]WPF Trigger based on DataGridCell Value Type

我正在尝试的是

<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事件并配置列内容的外观:

主窗口.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.FontStyle XAML 属性来设置字体样式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM