我目前正在研究WPF中的highlightable richtextbox控件。用户可以在搜索框中键入一些文本,richtextbox突出显示搜索到的单词的出现。 一切工作正常,直到我有超链接在RichTextBox中,例如:WPF错误?将UnsetValue应用于超链接中的Foreground属性
blablabla stackoverflow.com
我搜索的词:用
st
它突出(在计算器“ST”)文本正确红色的前景。 但是当我按退格 - 这样的搜索词变成单“S”字母 - ,我得到一个异常:
System.ArgumentException: 'NamedObject' parameter type is not valid for formatting property 'Foreground'.
Parameter name: value
这是因为我的算法是这样的:
突出显示文本中的RichTextBox:我添加的每个突出的TextRange的词典,其中关键是突出的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中的一个奇怪的错误,或者我做错了什么?
我转发问题在这里:http://stackoverflow.com/questions/11668598/wpf-bug-textrange-getpropertyvalue-in-richtextbox – Zsolt 2012-07-26 11:47:35