我在WPF Richtextbox中突出显示所有不间断的空间。 一旦找到所需的文本范围,我就打电话:
textrange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.DarkRed);
它工作正常。但是,如果突出显示发生在文档的末尾,则所有新输入的文本也会突出显示,这很糟糕。 有谁知道如何解决这个问题?
完整的代码:
private void HighLightNonbreakSpace()
{
var start = this.Document.ContentStart;
char nonBreakSpace = System.Convert.ToChar(160);
while (start != null && start.CompareTo(this.Document.ContentEnd) < 0)
{
if (start.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
var match = start.GetTextInRun(LogicalDirection.Forward).IndexOf(nonBreakSpace);
if (match >=0)
{
var matchPos = start.GetPositionAtOffset(match, LogicalDirection.Forward);
var textrange = new TextRange(matchPos, matchPos.GetPositionAtOffset(1,LogicalDirection.Forward));
textrange.ApplyPropertyValue(TextElement.BackgroundProperty, Brushes.DarkRed);
start = textrange.End;
}
}
start = start.GetNextContextPosition(LogicalDirection.Forward);
}
}
答案 0 :(得分:2)
您可能不仅需要突出显示nbsps,还要突出显示其他所有内容,即在您的例程中添加else分支。默认情况下,新键入的文本将从之前的任何内容中获取其属性,因此您必须确定最后键入的字符是否是相应的,并相应地设置其属性。