2014-10-19 73 views
2

如何將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不會在新鏈接結束後設置,而是停留在新鏈接的前面。另外,它對我來說看起來不太健壯。

有沒有人成功地做到了這一點?什麼是正確的方式來做到這一點?

回答

1

我必須修改第一code.The RichTextBox.Selection是具有所謂GetPropertyValue方法可以讓你得到一些格式性能TextRangeFontStyleFontWeightFontSize(我認爲這是不夠的)。所以,你可以設置爲新創建的Hyperlink那些實現格式信息:

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 ... 

,使鏈接具有默認的樣式(藍色帶下劃線),我們要在RichTextBox的財產IsDocumentEnabled設置爲true。插入後,您也可以在RichTextBox上調用Focus()