我目前正在研究WPF中一个可突出显示的richtextbox控件。用户可以在搜索框中键入一些文本,并且richtextbox突出显示搜索到的单词的出现。 一切正常,直到我在richtextbox中有超链接,例如:
blablabla stackoverflow.com
我搜索这个词:
st
它使用红色前景正确突出显示文本(stackoverflow中的“st”)。 但是当我按下退格键 - 所以搜索词成为单个“s”字母时,我得到一个例外:
System.ArgumentException: 'NamedObject' parameter type is not valid for formatting property 'Foreground'.
Parameter name: value
这是因为我的算法看起来像这样:
突出显示richtextbox中的文本:我将每个突出显示的TextRange添加到Dictionary中,其中键是突出显示的TextRange,值是我使用此代码检索的TextRange的旧前景属性:
textrange.GetPropertyValue(TextElement.ForegroundProperty)
每次用户更改过滤字符串时,我都会删除旧的突出显示,并使用新的过滤字符串“重新突出显示”richtextbox,如步骤1所示。
异常来自流程的“删除突出显示”部分。要删除突出显示,我枚举字典,对于每个TextRange,我将ForegroundProperty重置为保存的值:
foreach (var textRangeEntry in highlightedTexts)
{
textRangeEntry.Key.ApplyPropertyValue(TextElement.ForegroundProperty, textRangeEntry.Value);
}
问题是有时候保存的ForegroundProperty变成了DependencyProperty.UnsetValue - 我得到了一个异常。
这很奇怪。看起来ForegroundProperty“不喜欢”UnsetValue,但是例如,当我过滤到
时ov
在文中
blablabla stackoverflow.com
然后当我删除“v”时,一切都没问题。
只有当我突出显示超链接的开头时才会出现异常。
它是WPF中的一个奇怪的错误还是我做错了什么?
答案 0 :(得分:0)
我已经意识到这个问题(bug?)在textrange.GetPropertyValue调用中。我将以更短,更具体的形式重新提交这个问题。