2012-09-06 74 views
1

是否有可能動態添加超鏈接而不創建像這個問題中的新段落Dynamically adding hyperlinks to a RichTextBox添加可點擊的超鏈接到RichTextBox沒有新的段落

我想要「請訪問http://www.google.com。謝謝!」不

「請訪問

http://www.google.com

。謝謝你!」。

另外RichTextBox必須是隻讀的,用戶不能輸入它。這就像日誌,我需要的是定期添加一些有時包含URL的文本。

+0

你的意思RichTextBox的最後一段:要從富文本通過執行以下操作刪除空行。 – Paparazzi

回答

6

OK,貌似這裏是我所需要的(感謝@Blam和@PaulN Dynamically adding hyperlinks to a RichTextBox):

public MainWindow() 
    { 
     InitializeComponent(); 

     rtb.IsDocumentEnabled = true; 
     rtb.Document.Blocks.FirstBlock.Margin = new Thickness(0); 
    } 

    private void AddHyperlinkText(string linkURL, string linkName, 
       string TextBeforeLink, string TextAfterLink) 
    { 
     Paragraph para = new Paragraph(); 
     para.Margin = new Thickness(0); // remove indent between paragraphs 

     Hyperlink link = new Hyperlink(); 
     link.IsEnabled = true; 
     link.Inlines.Add(linkName); 
     link.NavigateUri = new Uri(linkURL); 
     link.RequestNavigate += (sender, args) => Process.Start(args.Uri.ToString()); 

     para.Inlines.Add(new Run("[" + DateTime.Now.ToLongTimeString() + "]: ")); 
     para.Inlines.Add(TextBeforeLink); 
     para.Inlines.Add(link); 
     para.Inlines.Add(new Run(TextAfterLink)); 

     rtb.Document.Blocks.Add(para); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     AddHyperlinkText("http://www.google.com", "http://www.google.com", 
       "Please visit ", ". Thank you! Some veeeeeeeeeery looooooong text."); 
    } 

enter image description here

但一個小問題左:也許有人知道如何刪除上面圖像上用紅線標記的開始空白處?

+0

你能弄清楚如何刪除空行嗎?我有同樣的問題:( – BVB

+0

@BVB,不,我也嘗試修改某種方式,並從這個答案使用解決方案http://stackoverflow.com/questions/861409/wpf-making-hyperlinks-clickable,但尚未完成這是因爲放棄了我需要的項目。 – AlexP11223

+0

我能弄明白,但解決方案有點怪異,我不完全確定它爲什麼起作用。'rtb.Document.Blocks.Add(para); rtb.Document .Blocks.Remove(rtb.Document.Blocks.FirstBlock); rtb.Document.Blocks.Add(para);'添加一個段落,刪除第一個塊,然後再次添加段落,擺脫空行。 http://i.imgur.com/LVWtKkQ.png之後:http://i.imgur.com/52MKbwJ.png – BVB

2

,作爲使一個RichTextBox或文本框只讀

TextBoxBase.IsReadOnly Property

對於添加文字,您可以使用一個運行

FlowDocument doc = new FlowDocument(); 
    rtb.Document = doc; 
    rtb.IsReadOnly = true; 

    Paragraph para = new Paragraph(); 
    doc.Blocks.Add(para); 

    Hyperlink link = new Hyperlink(); 
    link.IsEnabled = true; 
    link.Inlines.Add("Hyperlink"); 
    link.NavigateUri = new Uri("http://www.google.co.uk"); 
    para.Inlines.Add(link); 
    Run run = new Run(); 
    run.Text = " next words"; 
    para.Inlines.Add(run); 
1

你可以做到這一點與

<ContentControl> 
    <Span> 
     <Run Text="Please visit"/> 
     <Hyperlink NavigateUri="http://google.com"> 
      <Run Text="google"/> 
     </Hyperlink> 
     <Run Text=". Thank you!"/> 
    </Span> 
</ContentControl> 

而且如果你在一個導航框架中,你可以免費獲得超鏈接功能

或者......

<StackPanel Orientation="Horizontal"> 
<TextBlock Text="Please visit"/> 
<Button Style="linkButton" Content="Google" Command/Click="GotoGoogle"/> 
<TextBlock Text=". Thank you!"/> 
</StackPanel> 
1

注:在RichTextBox中的開頭

MyRichTextBox.Document.Blocks.Clear(); 

移動空格,你添加段落運行