Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么此突出显示代码不能正常工作?_C#_Wpf_Regex_Richtextbox - Fatal编程技术网

C# 为什么此突出显示代码不能正常工作?

C# 为什么此突出显示代码不能正常工作?,c#,wpf,regex,richtextbox,C#,Wpf,Regex,Richtextbox,首先,我不会说英语,我会尽力解释我的问题 我使用XAML和C制作了一个聊天控件,我制作了一个带有3列的自定义表控件,直接添加到RichTextBox.Document.Blocks中,一切正常;我有一个代码,用于通过正则表达式突出显示文本,但无法正确突出显示其他内容,但无法突出显示正则表达式匹配项,下面是代码: TextPointer start = message.content.ContentStart; foreach (var x in styles) {

首先,我不会说英语,我会尽力解释我的问题

我使用XAML和C制作了一个聊天控件,我制作了一个带有3列的自定义表控件,直接添加到RichTextBox.Document.Blocks中,一切正常;我有一个代码,用于通过正则表达式突出显示文本,但无法正确突出显示其他内容,但无法突出显示正则表达式匹配项,下面是代码:

    TextPointer start = message.content.ContentStart;
    foreach (var x in styles)
    {
        for (var y = Regex.Match(message.Content as string, x.Key); y.Success; y = y.NextMatch())
        {
            var textrange = new TextRange(
                start.GetPositionAtOffset(y.Index),
                start.GetPositionAtOffset(y.Index + y.Length));
            textrange.ApplyPropertyValue(TextElement.ForegroundProperty,
                new SolidColorBrush(Colors.Red));
        }
    }
message.content是在段落中运行的,styles是字符串正则表达式和文本样式的字典,但它的实现并不便于阅读


提前谢谢,请原谅我的英语:s

除了正则表达式匹配之外,它还突出显示所有东西吗?它突出显示了疯狂的东西,我认为问题在于从偏移量到文本指针的转换,但我无法解决问题…开始偏移量对我有效,但是+y.长度不能创建正确的文本范围-它总是短2-4个字符。根据文档GetPositionAtOffset的偏移量是“符号”而不是可打印字符。因此,将它与从字符串生成的索引一起使用是行不通的。