#c# #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();
}
}
Какие ошибки я здесь совершаю? Формат привязки имеет какие-либо ошибки или в преобразовании?
Ответ №1:
Вы не должны делать это вот так. DataGridCell
Он непосредственно не содержит никакой информации о типе базового типа данных. Самый простой способ-прослушать DataGrid.AutoGeneratingColumn
событие и настроить внешний вид содержимого столбца:
Главное окно.xaml
<DataGrid AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" />
Главное окно.xaml.cs
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
var dataGrid = sender as DataGrid;
if (e.PropertyType.Equals(typeof(DateTime))
amp;amp; e.Column is DataGridTextColumn column)
{
column.FontStyle = FontStyles.Italic;
}
}
В случае, если вы не создаете столбцы автоматически, вы можете задать стиль шрифта, установив атрибут DataGridTextColumn.FontStyle
XAML.
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn FontStyle="Italic" />
</DataGrid.Columns>
</DataGrid>
Комментарии:
1. О, большое спасибо, я не понял, что DataGridCell содержит текстовый блок. Большое спасибо за мгновенную помощь. Я буду использовать событие DataGrid_AutoGeneratingColumn.
2. Да, текстовый блок неявно создается для отображения значений после вызова toString() для нестроковых типов.