【问题标题】:Highlighting part of the text in DataGrid Cell突出显示 DataGrid 单元格中的部分文本
【发布时间】:2014-05-10 12:04:41
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

    标签: c# wpf highlighting


    【解决方案1】:

    你可以:

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

    选项 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 一样绘图,但没有必要,不推荐。

    【讨论】:

    • 我的要求有点复杂。将尝试上述程序来解决它。我们可以像 WinForms 一样绘图,这是什么意思?
    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2011-05-27
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多