HyperLink, RichTextBlock et liens extérieurs

Pour ma nouvelle application Wikipedia, qui va remplacer MyEncyclopedia, j’utilise le contrôle RichTextBlock, contrôle très puissant mais pas forcément très « intuitif », un des celles contrôles qui sans documentation n’est pas facile à utiliser.

Je vais donc en profiter pour partager une petite astuce avec vous.

Il est possible d’ajouter des éléments hyperlink à votre richtextblock, celle-ci dispose notamment d’une propriété NavigateUri qui correspond à la page que l’on souhaite afficher. Un exemple :

<RichTextBox>
    <Paragraph>
        Ce texte contient un lien vers <Hyperlink NavigateUri="http://www.rudyhuyn.com">ce blog</Hyperlink>.
    </Paragraph>
</RichTextBox>

 

Si le chemin est relatif alors Windows Phone cherchera à afficher une page XAML de votre application, si le chemin est une URL absolue comme « http://www.bing.com » il cherchera à…. non pas internet explorer mais la page « http://www.bing.com », qui n’existe pas évidemment.

Comment indiquer à HyperLink que l’on souhaite lancer Internet Explorer ?

Il y a bien un évènement Click, on pourrait donc s’en contenter, sauf que HyperLink ne contient pas de DataContext et encore moins de Tag, il est donc difficile de lui « passer » la valeur du lien en paramètre.

En fait l’astuce est très simple, il suffit de modifier la valeur par défaut de la propriété TargetName en lui indiquant par exemple « _blank ». Lorsque l’utilisateur cliquera alors sur le lien, Internet Explorer s’affichera alors avec la page indiqué.

<RichTextBox>
    <Paragraph>
        Ce texte contient un lien vers <Hyperlink TargetName="_blank" NavigateUri="http://www.rudyhuyn.com">ce blog</Hyperlink>.
    </Paragraph>
</RichTextBox>

Pour information, l’astuce fonctionne aussi avec le contrôle HyperlinkButton !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>