簡體   English   中英

如何在RichTextBox(WPF)中啟用圖像和鏈接?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM