【问题标题】:Determining the selected InlineUIContainer in a WPF RichTextBox确定 WPF RichTextBox 中选定的 InlineUIContainer
【发布时间】:2010-10-13 15:50:23
【问题描述】:

我想确定 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 插入符号位置发生变化时让它工作。

有什么方法可以实现吗?

提前致谢

马特

【问题讨论】:

    标签: wpf richtextbox selection


    【解决方案1】:

    您可以使用 CaretPosition.Parent 并使用“is”运算符。

    【讨论】:

      【解决方案2】:

      如果您的 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");
                              }
                          }
                      }
                  }
              }
      

      【讨论】:

      • 我已经尝试了您的第二个建议,它似乎很有效。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多