代码之家  ›  专栏  ›  技术社区  ›  Steven Robbins

wpf richtextbox自定义文本属性

  •  1
  • Steven Robbins  · 技术社区  · 15 年前

    好的,我正在尝试向richtextbox控件中的一段文本添加“自定义属性”。我以为这很容易,但显然不是——)

    我想要的基本功能是能够在一个特定的单词上设置一个属性,并且能够在双击一个单词时检测该属性是否存在。

    我最初的方法是创建一个新的dp并将其应用于文本,但textRange实际上不是一个依赖对象,Reflector显示它只接受某些dps,这些dps直接映射到“真实”属性。

    不幸的是,我似乎找不到任何其他的“钩子”来让我这样做。我不能继承我可以应用于文本的任何东西,因为我所需要的一切要么是密封的,要么包含内部摘要,所以我有点茫然。

    我可以跟踪具有外部属性的范围,并随着文本的更新而更新,但这听起来很糟糕,我真的不想为这一功能创建自己的richtextbox!

    任何建议都是最受欢迎的:—)

    2 回复  |  直到 15 年前
        1
  •  2
  •   Arcturus    15 年前

    通过对richtextbox的个人体验,我了解到这个控件可能会将run和spans组合在一起(如果它们看起来相似),这意味着您将丢失试图用textrange设置的自定义信息。这在文本区域重叠的情况下发生了很多。所以基本上,您不能使用textrange解决这个问题。

    我们在这个控件上也有类似的问题,实际上我们最终得到了一个小的脏黑客。下面是我们最后做的:

    可以将inlineuicontainer和blockuicontainer元素插入到流程文档中。在其中一个容器中,您可以放置任何您想要的ui元素。我们最终创建了一个附加属性,并将这些宝贵的信息放入那些uicontainer中的控件控件中。

    如果我们需要这些信息,我们会查找最近的容器元素,提取信息,等等。这是一个阻力。我知道,但它起作用了:)..

    但有一个问题……用户只需按“删除”按钮,就可以手动删除这些容器。但是,您可以使用在发生这种情况时将被激发的卸载事件检测到这一点。

        2
  •  0
  •   Tim Gemma    15 年前

    inlineuicontainers将 保存在textRange中。但保存对xamlPackage的调用,即使preservetextElements为true。我认为您必须使用XamlWriter来保留inlineUIContainers,但是这样您就失去了将图像嵌入文档的能力。

    我还没有找到一种方法来在文档的各个部分嵌入自定义属性,并且能够嵌入图像。