突出显示数据网格单元格中的部分文本

本文关键字:文本 单元格 网格 显示 数据 数据网 | 更新日期: 2023-09-27 17:55:28

我想突出显示 WPF 应用程序数据网格中的字符串。
在WinForms中,有一个CellPainting事件可以帮助我们实现这一目标。我无法在 WPF 中找到任何内容。

我想突出显示单元格中存在的部分文本而不是整个单元格

任何帮助将不胜感激。

突出显示数据网格单元格中的部分文本

您可以:

添加数据网格模板列。在模板中放置一个文本块。然后,选项 1:插入您的文本块运行。设置其格式。并将运行绑定到您的数据。选项 2:通过转换器等在过程代码中设置文本块的内容。

选项 1

    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBlock>
                    <Run Text="{Binding xx}" Background="Yellow" />
                    <Run Text="{Binding yy}" />
                </TextBlock>                            
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

选项 2

XAML

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <DataTemplate.Resources>
            <myns:ConvertToFormatedRuns xmlns:myns="clr-namespace:YourProjectName" />
        </DataTemplate.Resources>
        <Label>
            <Label.Content>
                <MultiBinding Converter={StaticResource ConvertToFormatedRuns}>
                    <Binding Path="xxx" />
                    <Binding Path="yyy" />
                </MultiBinding>
            </Label.Content>
        </Label>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

法典

public class ConvertToFormatedRuns : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var tb = new TextBlock();
        tb.Inlines.Add(new Run() { Text = (string)values[0], Background = Brushes.Yellow });
        tb.Inlines.Add(new Run() { Text = (string)values[1]});
        return tb;
    }
}

注释:您也可以像WinForms一样绘制,但这是不必要的,不建议使用。