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());
}

広告

コメント / トラックバック1件 to “WPF RichTextBox でハイパーリンクをクリックしたとき”

  1. tagawa Says:

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

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。