是否有可能動態添加超鏈接而不創建像這個問題中的新段落Dynamically adding hyperlinks to a RichTextBox?添加可點擊的超鏈接到RichTextBox沒有新的段落
我想要「請訪問http://www.google.com。謝謝!」不
「請訪問
。謝謝你!」。
另外RichTextBox必須是隻讀的,用戶不能輸入它。這就像日誌,我需要的是定期添加一些有時包含URL的文本。
是否有可能動態添加超鏈接而不創建像這個問題中的新段落Dynamically adding hyperlinks to a RichTextBox?添加可點擊的超鏈接到RichTextBox沒有新的段落
我想要「請訪問http://www.google.com。謝謝!」不
「請訪問
。謝謝你!」。
另外RichTextBox必須是隻讀的,用戶不能輸入它。這就像日誌,我需要的是定期添加一些有時包含URL的文本。
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.");
}
但一個小問題左:也許有人知道如何刪除上面圖像上用紅線標記的開始空白處?
你能弄清楚如何刪除空行嗎?我有同樣的問題:( – BVB
@BVB,不,我也嘗試修改某種方式,並從這個答案使用解決方案http://stackoverflow.com/questions/861409/wpf-making-hyperlinks-clickable,但尚未完成這是因爲放棄了我需要的項目。 – AlexP11223
我能弄明白,但解決方案有點怪異,我不完全確定它爲什麼起作用。'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
,作爲使一個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);
你可以做到這一點與
<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>
注:在RichTextBox中的開頭
MyRichTextBox.Document.Blocks.Clear();
移動空格,你添加段落運行
你的意思RichTextBox的最後一段:要從富文本通過執行以下操作刪除空行。 – Paparazzi