添加可点击的超链接到没有新段落的RichTextBox

时间:2012-09-06 15:26:39

标签: c# wpf richtextbox

是否可以动态添加超链接而无需创建新问题Dynamically adding hyperlinks to a RichTextBox中的新段落?

我想要“请访问http://www.google.com。谢谢!”不是

“请访问

http://www.google.com

。谢谢!“。

此外,RichTextBox必须是只读的,用户无法输入。这就像日志,我需要的是定期添加一些有时包含URL的文本。

4 个答案:

答案 0 :(得分:8)

好的,看起来就像我需要的那样(感谢@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

但是剩下一个小问题:也许有人知道如何删除开头的空白区域,上面的图片上用红线标记?

答案 1 :(得分:2)

至于将RichTextBox或TextBox设为只读

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);

答案 2 :(得分:1)

你可以用

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

如果您在navigationFrame中,则可以免费获得超链接功能

或者...

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

答案 3 :(得分:1)

注意:要通过执行以下操作从RichText中删除空行:

MyRichTextBox.Document.Blocks.Clear();

在添加段落运行

时,在RichTextBox的开头移动空格