WPF FlowDocumentScrollViewer Selection.Select Не работает - PullRequest
1 голос
/ 19 июля 2010

Я пытаюсь выделить текст в моем FlowDocumentScrollViewer.

Я могу найти начальную и конечную позиции TextPointer.Таким образом, у меня есть 2 TextPointers ...

TextPointer startPos;
TextPointer endPos;

Используя эти 2 TextPointers, я пытаюсь выделить текст в FlowDocumentScrollViewer.Я делаю это так ...

flowDocumentScrollViewer.Selection.Select(startPos, endPos);

Я ожидаю, что это выделит выделенный текст.Но он этого не делает.

Почему это не работает ???

[ОБНОВЛЕНИЕ] Вот как я получаю TextPointers:

TextPointer pointer = flowDocument.Document.ContentStart;
while (pointer != null)
{
  if (pointer.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
  {
    string textRun = pointer.GetTextInRun(LogicalDirection.Forward);
    // where textRun is the text in the flowDocument
    // and searchText is the text that is being searched for
    int indexInRun = textRun.IndexOf(searchText);
    if (indexInRun >= 0)
    {
      TextPointer startPos = pointer.GetPositionAtOffset(indexInRun);
      TextPointer endPos = pointer.GetPositionAtOffset(indexInRun + searchText.Length);
    }
  }
  pointer = pointer.GetNextContextPosition(LogicalDirection.Forward);
}

1 Ответ

1 голос
/ 19 июля 2010

Я скопировал следующий код из документации MSDN метода TextRange.Select , заменил RichTextBox на FlowDocumentScrollViewer, и он работает, как и ожидалось. Как вы определили свои TextPointers? Это кажется наиболее вероятной причиной вашей проблемы.

ОБНОВЛЕНИЕ: я обновил свой код, чтобы включить ваш алгоритм выбора, и он все еще работает. Единственное, что я знаю о том, чтобы делать по-другому, это «перерыв» после выбора. В противном случае он будет выбираться с начала первого вхождения searchText до конца последнего вхождения. Кроме этого, я мог бы предположить, что ваш searchText может вообще не быть включен в ваш документ (возможно, проблема с регистром?), Но это только предположение. Вы отлаживали свой код? Являются ли TextPointers действительными (не нулевыми и т. Д.) При попытке выделить текст?

XAML:

<FlowDocumentScrollViewer GotMouseCapture="richTB_GotMouseCapture" Name="richTB">
    <FlowDocument>
        <Paragraph Name="myParagraph">
            <Run>
                When the user clicks in the RichTextBox, the selected text changes programmatically.
            </Run>
        </Paragraph>
    </FlowDocument>
</FlowDocumentScrollViewer>

Код:

private void richTB_GotMouseCapture(object sender, MouseEventArgs e)
{
    string searchText = "text";
    TextPointer pointer = richTB.Document.ContentStart;
    while (pointer != null)
    {
        if (pointer.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
        {
            string textRun = pointer.GetTextInRun(LogicalDirection.Forward);
            // where textRun is the text in the flowDocument
            // and searchText is the text that is being searched for
            int indexInRun = textRun.IndexOf(searchText);
            if (indexInRun >= 0)
            {
                TextPointer startPos = pointer.GetPositionAtOffset(indexInRun);
                TextPointer endPos = pointer.GetPositionAtOffset(indexInRun + searchText.Length);
                richTB.Selection.Select(startPos, endPos);
                break;
            }
        }
        pointer = pointer.GetNextContextPosition(LogicalDirection.Forward);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...