2

この質問のように新しい段落を作成せずにハイパーリンクを動的に追加することは可能ですか? RichTextBoxにハイパーリンクを動的に追加しますか?

「 http://www.google.comにアクセスしてください。ありがとうございます!」のようなものが欲しいです。いいえ

"来てください

http://www.google.com

。ありがとうございました!"。

また、RichTextBoxは読み取り専用である必要があり、ユーザーは入力できません。これはログのようなものです。必要なのは、URLを含むテキストを定期的に追加することだけです。

4

4 に答える 4

10

OK、これが私が必要としているもののように見えます(@Blamと@PaulNに感謝します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.");
    } 

ここに画像の説明を入力してください

しかし、1つ小さな問題が残っています。上の画像で赤い線でマークされている最初の空白スペースを削除する方法を誰かが知っているでしょうか。

于 2012-09-06T18:18:53.543 に答える
2

RichTextBox または TextBox を読み取り専用にすることについて

TextBoxBase.IsReadOnly プロパティ

テキストを追加するには、実行を使用できます

    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);
于 2012-09-06T15:42:31.807 に答える
2

注: リッチテキストから空白行を削除するには、次の手順を実行します。

MyRichTextBox.Document.Blocks.Clear();

段落ランを追加するときに、RichTextBox の先頭に空白スペースを移動します。

于 2014-12-11T01:11:26.440 に答える
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>
于 2012-09-06T15:48:01.130 に答える