WPF RichTextBox でハイパーリンクをクリックしたとき

WPFアプリケーションの中で、RichTextBox のHyperlink で、NavigationUri をセットしても、Clickイベントがキックされない。

RichTextBox のHyperlink は、NavigationWindow or Frame で navigation がサポートされているときだけ
http://social.msdn.microsoft.com/forums/en-US/wpf/thread/85171e54-7f98-425e-820d-46a17e19721e
という記事があるが、本当?

ということで、WPFアプリケーションの中で、RichTextBox のHyperlink をクリックしたときに、そのURLを開くには、MouseLeftButtonDown を使って、こんな感じ

<RichTextBox Height="100" Name="richTextBox1" Width="200" >
    <FlowDocument>
        <Paragraph>
            <Run>Paragraph 1</Run>
            <Run>Paragraph 2</Run>
            <Label >hello</Label>
            <Hyperlink NavigateUri="http://uchukamen.com"  MouseLeftButtonDown="Hyperlink_MouseLeftButtonDown"  >
                <Run>http://uchukamen.com</Run>
            </Hyperlink>
        </Paragraph>
    </FlowDocument>
</RichTextBox>

private void Hyperlink_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString());
}

=================

とするか、コードで書く場合は、

var fd = new FlowDocument();
this.RTB.Document = fd;

var p = new Paragraph();
p.Inlines.Add("ハイパーリング");

Hyperlink l = new Hyperlink();
l.Inlines.Add(http://uchukamen.com);
l.NavigateUri = new Uri("http://uchukamen.com");
l.MouseLeftButtonDown +=new MouseButtonEventHandler(l_MouseLeftButtonDown);

p.Inlines.Add(l);

fd.Blocks.Add(p);

——————————–

void l_MouseLeftButtonDown(object sender, RoutedEventArgs e)
{
    System.Diagnostics.Process.Start(((Hyperlink)sender).NavigateUri.ToString());
}

「WPF RichTextBox でハイパーリンクをクリックしたとき」への0件のフィードバック

  1. 大変助かりました。いつも参考にさせていただいてます。ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です