Как вы вставляете HyperLink в FlowDocument в определенной позиции? Новый HyperLink должен иметь такое же форматирование, как и окружающий текст, за исключением цвета (всегда должен быть синий) и подчеркивания (всегда следует подчеркивать). После установки HyperLink курсор должен быть сразу после нового HyperLink.FlowDocument: Вставить гиперссылку и сохранить форматирование
Что я пробовал:
TextPointer caretPosition = richTextBox.CaretPosition;
TextPointer insertPosition = caretPosition.IsAtInsertionPosition ? caretPosition : caretPosition.GetInsertionPosition(LogicalDirection.Forward);
string linkTitle = "Stack Overflow";
Run run = new Run(linkTitle);
Hyperlink link = new Hyperlink(run, insertPosition);
link.IsEnabled = true;
link.NavigateUri = new Uri(@"http://www.stackoverflow.com");
richTextBox.CaretPosition = run.ContentEnd;
Это работает, но новый гиперссылок не имеет форматирования это окружающий текст.
this.CaretPosition = this.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward);
insertPosition.InsertTextInRun(linkTitle);
Hyperlink link = new Hyperlink(insertPosition, insertPosition.GetPositionAtOffset(linkTitle.Length));
link.IsEnabled = true;
link.NavigateUri = new Uri(@"http://www.stackoverflow.com");
TextPointer positionAfterLink = link.ContentEnd.GetPositionAtOffset(1);
if (!positionAfterLink.IsAtInsertionPosition)
positionAfterLink = caretPosition.GetInsertionPosition(LogicalDirection.Forward);
richTextBox.CaretPosition = positionAfterLink;
Таким образом, форматирование сохраняется. Но иногда CaretPosition не стоит за концом новой ссылки, но остается перед новой ссылкой. Кроме того, он не выглядит очень надежным для меня.
Неужели кто-то успешно это сделал? Каким будет правильный способ сделать это?