[英]How to Enable Images and links in RichTextBox (WPF)?
由於在Stack Overflow中已經發布了一個問題,我試圖將隱藏的Web瀏覽器的內容復制到RichTextBox中,這是我的代碼
<WebBrowser Name="webBrowser1" helper:WebBrowserHelper.BindableSource="C:\Users\med\Desktop\cover.xhtml" Visibility="Hidden"/>
<RichTextBox IsReadOnly="True" Name="richTextBox1" />
這是我的代碼背后:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
dynamic document = webBrowser1.Document;
document.ExecCommand("SelectAll", false, null);
document.ExecCommand("Copy", false, null);
richTextBox1.Paste();
}
這里的問題是,當HTML頁面顯示在RichTextBox控件中時,我無法單擊鏈接以移動到另一頁面,也無法顯示圖像……有什么建議嗎?
此操作的主要目的是啟用對html內容的選擇,因為在Web瀏覽器中,我無法啟用它並捕獲所選文本的開始和結束位置,而這對於在HTML文本上突出顯示是必需的(來自Epub) File)[如果我使用textrange
,並且用戶選擇一個單詞並將其突出顯示,則該單詞在此html文件中重復存在時將被突出顯示N次,但我只想突出顯示所選的部分)。 是否有其他替代方法?
若要啟用用戶與RichTextBox
超鏈接的交互,需要將RichTextBox.IsDocumentEnabled
屬性設置為true
。 用戶現在可以通過Ctrl + Click鏈接:
<RichTextBox IsDocumentEnabled="True" />
如果將控件標記為只讀,則只需單擊一下,它們就可以跟隨:
<RichTextBox IsDocumentEnabled="True" IsReadOnly="True" />
完成此操作后,仍然有必要在用戶單擊超鏈接時提供回調。 RichTextBox
中的Hyperlink
包含在Hyperlink
類的實例中。 此類有一個RequestNavigate
事件,它RequestNavigate
您的需求。 您可以在每個Hyperlink
上分別設置每個事件,但是將其設置在包含的RichTextBox
上要容易得多,並允許路由事件機制將RequestNavigate
到文本框。
您可以在窗口的OnLoaded
中的代碼中執行此操作:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
richTextBox1.AddHandler(Hyperlink.RequestNavigateEvent, new RequestNavigateEventHandler(HyperLink_RequestNavigate));
}
void HyperLink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
或者,您可以通過為Hyperlink
對象使用默認樣式並提供回調,在富文本框的XAML中執行此操作:
<RichTextBox Name="richTextBox1" AcceptsTab="True" IsDocumentEnabled="True">
<RichTextBox.Resources>
<Style TargetType="Hyperlink">
<EventSetter Event="RequestNavigate" Handler="HyperLink_RequestNavigate" />
</Style>
</RichTextBox.Resources>
</RichTextBox>
(注-在Windows 7中測試)。
就顯示圖像而言,這可以通過RichTextBox
。 如果創建包含某些圖像的Microsoft Word文檔,然后將整個文檔的內容復制並粘貼到RTB中,則會顯示其中包含的圖像。 如果我通過右鍵單擊圖像並選擇“復制圖像”,使用Firefox復制單個圖像,然后將其粘貼到RTB中,則會顯示出來。 但是,從Word復制和粘貼到RTB時將RTF用作其交換格式 ; 也許您的HTML轉換器有問題?
FlowDocument
一句,要確切地了解給定FlowDocument
哪些對象並不容易。 內部的結構沒有得到很好的記錄(有關概述,請參見此處 )。 我發現以下調試實用程序非常有用,它們將FlowDocument
轉換為XAML並以可讀格式輸出:
public static class FlowDocumentHelper
{
public static string ToFormattedXamlString(this FlowDocument doc)
{
if (doc == null)
return null;
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
var sb = new StringBuilder();
var xmlWriter = XmlWriter.Create(sb, settings);
XamlWriter.Save(doc, xmlWriter);
return sb.ToString();
}
public static string DebugFlowDocumentXaml(this FlowDocument doc)
{
var str = doc.ToFormattedXamlString();
Debug.WriteLine(str);
return str;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.