1

RichTextBlock のこのケースがあるとします:

<RichTextBlock IsTextSelectionEnabled="True">
    <Paragraph>
        <Run Text="{Binding Description}" />
    </Paragraph>
</RichTextBlock>

ユーザーがクリックしたときに Web ブラウザー アプリが開くように、コンテンツ内の可能なハイパーリンクを検出することは可能ですか?

たとえば、Descriptionプロパティが次の文字列で構成されているとします。

「Stackoverflow へようこそ。クイック ガイドはhttp://www.stackoverflow.com/guideにあります。質問を追跡するには、 http://www.stackoverflow.com/questions にアクセスしてください。コーディングをお楽しみください!」

現在、この正確な文字列は UI にバインドされていますが、Web ブラウザーを使用する場合と同じように、可能なリンクを検出し、それらをタップしたときにそれらに移動できるようにしたいと考えています。

無効に設定されたテキスト選択は、私が満たさなければならない要件の 1 つですが、少なくともリンクをコピーして貼り付けるのに役立つ可能性があります。

どんな提案でも大歓迎です!

4

1 に答える 1

0

HTML全体を解析する必要がありますが、まったくありません-誰かが提案したように正規表現を使用しないでください(正規表現はhtmlを解析できません)-NugetマネージャーからHtmlAgilityPackをインストールします(適切にフォーマットされたhtmlドキュメントでなくても、HtmlAgilityPackは仕事をする)。

XamlHtmlParser を自由に選んで微調整してください (現時点ではすべてがうまくいっているわけではありません。開発の初期段階ですが、そこからいくつかのクラスを使用して、ハイパーリンクや改行などを解析できます。)アプリの実装: https://github.com/thefex/Wykop/tree/dev_windows81_api/Wykop.ApiProvider/XamlParser

ハイパーリンクを「ナビゲート」したい場合は、適切な「NavigateUri」をHyperLinkNodeParserクラスに追加します。

使用法:

XamlHtmlParser htmlParser = new XamlHtmlParser(new DefaultHtmlNodeParserProvider());
RichTextBlock richTextBlock = ..;
var parsedHtmlBlocks = htmlParser.GetBlocksFromHtmlString(htmlLikeString);
richTextBlock.Blocks.Clear();

foreach (var parsedBlock in parsedHtmlBlocks)
   richTextBlock.Blocks.Add(parsedBlock);

ところで。バインディングができないようです-分離コードが必要です。

于 2015-01-10T22:55:08.627 に答える