我想确定在WPF RichTextBox中当前的Caret位置是否有InlineUIContainer(或BlockUIContainer).
目前我有一个RichTextBox如下;
Some text before Some text after
在SelectionChanged事件中,我尝试过使用;
rtf.CaretPosition.GetAdjacentElement(rtf.CaretPosition.LogicalDirection)
...返回null.
我可以使用MouseDoubleClicked事件处理程序,如下所示;
Point pos = e.GetPosition(rtf); TextPointer pointer = rtf.GetPositionFromPoint(pos, false); Console.WriteLine(pointer.GetAdjacentElement(pointer.LogicalDirection));
但是当RichTextBox插入位置发生变化时,我真的很想让它工作.
有什么办法可以实现吗?
提前致谢
马特
如果您的InlineUIContainer被赋予ax:Name属性,您可以使用以下代码专门查找:
if (rtf.Selection.Contains(myInlineUIContainer.ContentStart)) {...}
要获得更多动态发现,您需要一个这样的循环:
foreach (Block block in rtf.Document.Blocks) { Paragraph p = block as Paragraph; if (p != null) { foreach (Inline inline in p.Inlines) { InlineUIContainer iuic = inline as InlineUIContainer; if (iuic != null) { if (rtf.Selection.Contains(iuic.ContentStart)) { Console.WriteLine("YES"); } } } } }