需求:在WPF DataGrid 控件中,有以下列,绑定了一个LogType,值分别是0,1,2,根据不同的值,表现不同的内容以及背景
- <DataGrid ItemsSource="{Binding EventLog}">
- <DataGrid.Columns>
- <DataGridTextColumn Width="150" Binding="{Binding LogType}" Header="级别" >
- </DataGrid.Columns>
- </DataGrid>
复制代码 终极效果图如下:
一.实当代码
1.需要利用 DataGridTemplateColumn 来为 LogType 列自定义表现模板
- <DataGrid ItemsSource="{Binding EventLog}">
- <DataGrid.Columns>
- <DataGridTemplateColumn Header="级别" Width="150">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <Border
- BorderThickness="1"
- Background="{Binding LogType, Converter={StaticResource LogTypeToBackgroundConverter}}"
- CornerRadius="5"
- Padding="5"
- HorizontalAlignment="Center"
- VerticalAlignment="Center">
- <TextBlock
- Text="{Binding LogType, Converter={StaticResource LogTypeToTextConverter}}"
- Foreground="White"
- HorizontalAlignment="Center"
- VerticalAlignment="Center"
- FontWeight="Bold"/>
- </Border>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- </DataGrid.Columns>
- </DataGrid>
复制代码 2.接下来,我们需要定义两个转换器(LogTypeToBackgroundConverter 和 LogTypeToTextConverter),用于根据 LogType 的值来设置背景颜色和表现文本。
2.1 LogTypeToBackgroundConverter 转换器实现
- public class LogTypeToBackgroundConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is int logType)
- {
- switch (logType)
- {
- case 0:
- return "#00ee84";
- case 1:
- return "#f9c715";
- case 2:
- return "#df3c0b";
- default:
- return "#00d5e0";
- }
- }
- return "#00d5e0";
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- return null;
- }
- }
复制代码 2.2 LogTypeToTextConverter 转换器实现
- public class LogTypeToTextConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- if (value is int logType)
- {
- switch (logType)
- {
- case 0:
- return "提示";
- case 1:
- return "警告";
- case 2:
- return "错误";
- default:
- return "未知";
- }
- }
- return "未知";
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- return null;
- }
- }
复制代码 3.将转换器,添加到资源字典中
在你的 XAML 用户控件中,需要将转换器添加到资源字典中,以便在数据模板中利用。添加代码如下:
这样就完成了 LogType 列的自定义表现。根据 LogType 的值,可以看到不同的背景颜色和文本表如今 DataGrid 中。如果能帮到你们,记得点赞收藏呐!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |