在WPF RichTextBox中确定所选的InlineUIContainer

4

我希望确定在 WPF RichTextBox 的当前插入符位置是否有 InlineUIContainer(或 BlockUIContainer)。

目前,我的 RichTextBox 如下所示:

    <RichTextBox SelectionChanged="RichTextBox_SelectionChanged">
        <FlowDocument>
            <Paragraph>
                <Run>Some text before</Run>
                <InlineUIContainer>
                    <Label>I am a label</Label>
                </InlineUIContainer>
                <Run>Some text after</Run>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>

在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插入符号位置更改时它能正常工作。

有没有办法可以实现这个功能呢?

提前致谢。

Matt

2个回答

8

如果你为InlineUIContainer添加了x: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");
                        }
                    }
                }
            }
        }

我尝试了你的第二个建议,看起来非常有效。非常感谢! - user77159

0
你可以使用CaretPosition.Parent并使用"is"运算符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接