如何在特定位置将FlowLink插入FlowDocument?新的HyperLink应具有与周围文本相同的格式 - 除了颜色(应始终为蓝色)和下划线(应始终加下划线)。插入HyperLink后,光标应该在新的HyperLink之后。
我尝试过的事情:
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并未设置在新链接的末尾,而是保留在新链接的前面。此外,它对我来说看起来不太健壮。
有没有人成功地做到了?这样做的正确方法是什么?
答案 0 :(得分:1)
我会修改您的第一个代码。RichTextBox.Selection
是一个TextRange
,其中有一个名为GetPropertyValue
的方法,可以让您获得一些格式属性,例如FontStyle
,{{1 },FontWeight
(我认为这就够了)。因此,您可以为新创建的FontSize
:
Hyperlink
要使链接具有默认样式(蓝色和带下划线),我们必须将RichTextBox的属性TextPointer caretPosition = richTextBox.CaretPosition;
TextPointer insertPosition = caretPosition.IsAtInsertionPosition ?
caretPosition : caretPosition.GetInsertionPosition(LogicalDirection.Forward);
string linkTitle = "Stack Overflow";
//try getting some format info
var fStyle = (FontStyle) richTextBox.Selection
.GetPropertyValue(Control.FontStyleProperty);
var fWeight =(FontWeight)richTextBox.Selection
.GetPropertyValue(Control.FontWeightProperty);
var fSize = (double)richTextBox.Selection
.GetPropertyValue(Control.FontSizeProperty);
//create new link
Run run = new Run(linkTitle);
Hyperlink link = new Hyperlink(run, insertPosition);
link.FontStyle = fStyle;
link.FontWeight = fWeight;
link.FontSize = fSize;
//Remaining code ...
设置为true。插入后,您可能需要在RichTextBox上调用IsDocumentEnabled
。