是否可以动态添加超链接而无需创建新问题Dynamically adding hyperlinks to a RichTextBox中的新段落?
我想要“请访问http://www.google.com。谢谢!”不是
“请访问
。谢谢!“。
此外,RichTextBox必须是只读的,用户无法输入。这就像日志,我需要的是定期添加一些有时包含URL的文本。
答案 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.");
}
但是剩下一个小问题:也许有人知道如何删除开头的空白区域,上面的图片上用红线标记?
答案 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的开头移动空格