自学内容网 自学内容网

WPF DataGrid 列表中,DataGrid.Columns 列根据不同的值显示不同内容

需求:在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.接下来,我们需要定义两个转换器(LogTypeToBackgroundConverterLogTypeToTextConverter),用于根据 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 中。如果能帮到你们,记得点赞收藏呐!


原文地址:https://blog.csdn.net/weixin_39237340/article/details/142249440

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!