在DataGrid单元格中突出显示文本的部分

5

我希望在WPF应用程序中突出显示数据网格中的字符串。
在WinForms中,有一个CellPainting事件可以帮助我们实现这个目的。 但是我找不到WPF中的任何类似功能。

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

任何帮助都将不胜感激。

1个回答

3
你可以: 添加一个DataGridTemplateColumn,在模板中放置一个TextBlock。 然后,选项1:在你的TextBlock中插入Run。设置它们的格式,并将Run绑定到你的数据;选项2:通过转换器等程序代码设置TextBlock的内容。

选项1

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

Option 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一样进行绘图,但这是不必要的,也不推荐使用。


我的需求有点复杂。我会尝试上面的步骤来解决它。我们可以像WinForms一样进行绘图,这是什么意思? - user1816551

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接