2009-03-16 7 views
3

Ich möchte feststellen, ob es einen InlineUIContainer (oder BlockUIContainer) an der aktuellen Caret-Position in einer WPF RichTextBox gibt.Ermitteln des ausgewählten InlineUIContainer in einer WPF RichTextBox

Derzeit habe ich eine RichTextBox wie folgt;

<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> 

Im SelectionChanged-Ereignis habe ich versucht zu verwenden;

rtf.CaretPosition.GetAdjacentElement(rtf.CaretPosition.LogicalDirection) 

... die null zurückgibt.

Ich kann es mit dem MouseDoubleClicked-Ereignishandler wie folgt tun;

Aber ich würde es wirklich gerne arbeiten, wenn die RichTextBox Caret Position ändert.

Gibt es eine Möglichkeit, dies zu erreichen?

Vielen Dank im Voraus

Matt

Antwort

7

Wenn Ihr InlineUIContainer Axt gegeben: Attributnamen, können Sie danach suchen speziell mit diesem Code:

if (rtf.Selection.Contains(myInlineUIContainer.ContentStart)) 
{...} 

Für weitere dynamische Entdeckung Sie benötigen würde eine Schleife in etwa wie folgt:

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"); 
         } 
        } 
       } 
      } 
     } 
+0

Ich habe Ihren zweiten Vorschlag gegeben und es scheint ein Leckerbissen zu funktionieren. Vielen Dank! – user77159

1

Sie können verwenden CaretPosition.Parent und verwenden Sie den Operator "is".

Verwandte Themen