2009-03-16 2 views
3

Я хотел бы определить, есть ли встроенный объект InlineUIContainer (или BlockUIContainer) в текущей позиции Caret в WPF RichTextBox.Определение выделенного InlineUIContainer в WPF RichTextBox

В настоящее время у меня есть 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

ответ

7

Если InlineUIContainer дается топор: атрибут 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"); 
         } 
        } 
       } 
      } 
     } 
+0

Я дал вашему второму предложению уйти, и, похоже, он работает. Большое спасибо! – user77159

1

Вы можете использовать CaretPosition.Parent и используйте оператор «is».