WPF错误?将UnsetValue应用于超链接中的Foreground属性

时间:2012-07-26 10:55:58

标签: wpf richtextbox flowdocument

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

这是因为我的算法看起来像这样:

  1. 突出显示richtextbox中的文本:我将每个突出显示的TextRange添加到Dictionary中,其中键是突出显示的TextRange,值是我使用此代码检索的TextRange的旧前景属性:

    textrange.GetPropertyValue(TextElement.ForegroundProperty)
    
  2. 每次用户更改过滤字符串时,我都会删除旧的突出显示,并使用新的过滤字符串“重新突出显示”richtextbox,如步骤1所示。

    • 异常来自流程的“删除突出显示”部分。要删除突出显示,我枚举字典,对于每个TextRange,我将ForegroundProperty重置为保存的值:

      foreach (var textRangeEntry in highlightedTexts)
      {                
          textRangeEntry.Key.ApplyPropertyValue(TextElement.ForegroundProperty, textRangeEntry.Value);
      }
      
  3. 问题是有时候保存的ForegroundProperty变成了DependencyProperty.UnsetValue - 我得到了一个异常。

    这很奇怪。看起来ForegroundProperty“不喜欢”UnsetValue,但是例如,当我过滤到

    ov
    

    在文中

    blablabla stackoverflow.com
    

    然后当我删除“v”时,一切都没问题。

    只有当我突出显示超链接的开头时才会出现异常。

    它是WPF中的一个奇怪的错误还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

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