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 !