2012-07-26 53 views
0

我目前正在研究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 

这是因为我的算法是这样的:

  1. 突出显示文本中的RichTextBox:我添加的每个突出的TextRange的词典,其中关键是突出的TextRange,和值是的TextRange我与此代码检索旧前景属性:

    textrange.GetPropertyValue(TextElement.ForegroundProperty) 
    
  2. 用户每次更改过滤字符串,我删除旧的高亮和我“再亮点”与新的过滤字符串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

我已经意识到这个问题(bug?)是在textrange.GetPropertyValue调用中。我将以更短和更具体的形式重新发布这个问题。

+0

我转发问题在这里:http://stackoverflow.com/questions/11668598/wpf-bug-textrange-getpropertyvalue-in-richtextbox – Zsolt 2012-07-26 11:47:35