首页 文章

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

提问于
浏览
0

我目前正在研究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中的一个奇怪的错误还是我做错了什么?

1 回答

  • 0

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

相关问题