4

WPF RichTextBoxの現在のCaret位置に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のキャレットの位置が変わったときにそれを機能させたいと思っています。

これを達成する方法はありますか?

前もって感謝します

マット

4

2 に答える 2

8

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");
                        }
                    }
                }
            }
        }
于 2009-03-16T17:24:26.990 に答える
0

CaretPosition.Parent を使用して、「is」演算子を使用できます。

于 2009-11-17T19:58:02.390 に答える