html - リンクラベル - テキストブロックwpfにハイパーリンクを追加する




xaml リンク (2)

このような状況では、値変換器を使ってRegexを使用することができます。

要件を満たすためにこれを使用してください(元のアイデアはhereから):

    private Regex regex = 
        new Regex(@"\[a\s+href='(?<link>[^']+)'\](?<text>.*?)\[/a\]",
        RegexOptions.Compiled);

これはリンクを含むあなたの文字列のすべてのリンクにマッチし、それぞれのマッチに対して2つの名前付きグループを作成しtextlinktext

これで、すべてのマッチを繰り返すことができます。 それぞれの試合はあなたに

    foreach (Match match in regex.Matches(stringContainingLinks))
    { 
        string link    = match.Groups["link"].Value;
        int link_start = match.Groups["link"].Index;
        int link_end   = match.Groups["link"].Index + link.Length;

        string text    = match.Groups["text"].Value;
        int text_start = match.Groups["text"].Index;
        int text_end   = match.Groups["text"].Index + text.Length;

        // do whatever you want with stringContainingLinks.
        // In particular, remove whole `match` ie [a href='...']...[/a]
        // and instead put HyperLink with `NavigateUri = link` and
        // `Inlines.Add(text)` 
        // See the answer by Stanislav Kniazev for how to do this
    }

注:カスタムConvertToHyperlinkedText値コンバータでこのロジックを使用します。

ご挨拶、私はデータベースにいくつかのテキストを持っており、それは次のとおりです:

Lorem ipsum dolle amet、consectetur adipiscing elit。 (Duis tellus nisl、venenatis et pharetra ac、tempor sed sapien)。 完全な穏やかな穏やかな穏やかな季節。 デュリス・モリス、リバース・ユー・コンセプシテュウム・インターダム、マッサ・トルーマン・ノイジー、エリック・エリート・ラクスが必要です。 陳腐な祈り。 ** [a href = ' http://somesite.com ']いくつかのサイト[/ a] **このページの最上部に表示されているページは、 Phasellus ac mauris ipsum、vel auctor odio

私の質問は:どのようにTextBlock Hyperlinkを表示できますか? 私はこの目的のためにWebBrowserコントロールを使用したくありません。 私はこのコントロールを使用したくない: http://www.codeproject.com/KB/WPF/htmltextblock.aspx : http://www.codeproject.com/KB/WPF/htmltextblock.aspx


表示はやや単純ですが、ナビゲーションは別の質問です。 XAMLは次のようになります。

<TextBlock Name="TextBlockWithHyperlink">
    Some text 
    <Hyperlink 
        NavigateUri="http://somesite.com"
        RequestNavigate="Hyperlink_RequestNavigate">
        some site
    </Hyperlink>
    some more text
</TextBlock>

ハイパーリンクに移動するためのデフォルトのブラウザを起動するイベントハンドラは次のようになります:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) {
    System.Diagnostics.Process.Start(e.Uri.ToString());
}

編集:あなたはデータベースから得たテキストを使ってそれを行うには、何らかの形でテキストを解析する必要があります。 テキストパーツとハイパーリンクパーツが分かれば、コード内にテキストブロックコンテンツを動的に構築できます。

TextBlockWithHyperlink.Inlines.Clear();
TextBlockWithHyperlink.Inlines.Add("Some text ");
Hyperlink hyperLink = new Hyperlink() {
    NavigateUri = new Uri("http://somesite.com")
};
hyperLink.Inlines.Add("some site");
hyperLink.RequestNavigate += Hyperlink_RequestNavigate;
TextBlockWithHyperlink.Inlines.Add(hyperLink);
TextBlockWithHyperlink.Inlines.Add(" Some more text");