RichTextBox for UWP
ハイパーリンク
RichTextBox の使い方 > 主要な概念と機能 > ハイパーリンク

C1RichTextBox は、ハイパーリンクをサポートします。通常の HTML ドキュメントと同様に、この機能によってドキュメントの特定の部分をアクティブ化できます。ユーザーがハイパーリンクをクリックすると、アプリケーションは通知を受け取り、何らかのアクションを実行します。

次のコードに、ハイパーリンクを作成する方法を示します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Public Sub New()
    InitializeComponent()
    ' テキストを設定します
    rtb.Text = "ハイパリンクを含むサンプルテキストです。"
    ' ハイパーリンクを作成します
    Dim pos As Integer = rtb.Text.IndexOf("hyperlink")
    rtb.[Select](pos, 9)
    Dim uri = New Uri("https://developer.mescius.jp/", UriKind.Absolute)
    rtb.Selection.MakeHyperlink(uri)
    ' ナビゲーション要求を処理します
    rtb.NavigationMode = NavigationMode.Always
    AddHandler _rtb.RequestNavigate, AddressOf _rtb_RequestNavigate
End Sub

C# コードの書き方

C#
コードのコピー
public MainPage()
{
  InitializeComponent();
  // テキストを設定します
  rtb.Text = "ハイパリンクを含むサンプルテキストです。";
  // ハイパーリンクを作成します
  int pos = rtb.Text.IndexOf("hyperlink");
  rtb.Select(pos, 9);
  var uri = new Uri("https://developer.mescius.jp/", UriKind.Absolute);
  rtb.Selection.MakeHyperlink(uri);
  // ナビゲーション要求を処理します
  rtb.NavigationMode = C1.Xaml.RichTextBox.NavigationMode.Always;
  rtb.RequestNavigate += rtb_RequestNavigate;
}

このコードは、最初に C1RichTextBox にテキストを割り当てます。次に、"hyperlink" という単語を選択し、EditExtensions.MakeHyperlink メソッドを呼び出してハイパーリンクにします。パラメータは、新しいハイパーリンクの C1Hyperlink.NavigateUri プロパティに割り当てられる URI です。

その後、C1RichTextBox.NavigationMode プロパティを設定して、ハイパーリンクの上にマウスポインタが置かれたときに C1RichTextBox がそれを処理する方法を決定します。デフォルトでは、ハイパーリンクの上にマウスポインタを移動してタップすると、C1RichTextBox.RequestNavigate イベントが発生します。これにより、ユーザーはハイパーリンクのテキストを通常のテキストと同様に編集できます。

C1RichTextBox.RequestNavigate イベントハンドラは、ハイパーリンクナビゲーションを処理します。

ハイパーリンクのアクションは、URI ナビゲーションに限定されません。一連のカスタム URI アクションをアプリケーション内でコマンドとして使用するように定義することもできます。C1RichTextBox.RequestNavigate ハンドラで、これらのカスタム URI を解析して処理します。たとえば、次のコードは、ハイパーリンクを使用してメッセージボックスを表示します。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Public Sub New()
    InitializeComponent()
    ' テキストを設定します
    rtb.Text = "ハイパリンクを含むサンプルテキストです。"
    ' ハイパーリンクを作成します
    Dim pos As Integer = _rtb.Text.IndexOf("hyperlink")
    rtb.[Select](pos, 9)
    Dim uri = New Uri("msgbox:Thanks for clicking!")
    rtb.Selection.MakeHyperlink(uri)
    ' ナビゲーション要求を処理します
    rtb.NavigationMode = NavigationMode.Always
    AddHandler rtb.RequestNavigate, AddressOf _rtb_RequestNavigate
End Sub
Private Sub rtb_RequestNavigate(sender As Object, e As RequestNavigateEventArgs)
    Dim uri As Uri = e.Hyperlink.NavigateUri
    If uri.Scheme = "msgbox" Then
        MessageBox.Show(uri.LocalPath)
    End If
End Sub

C# コードの書き方

C#
コードのコピー
public MainPage()
        {
            this.InitializeComponent();
            // テキストを設定します
                rtb.Text = "ハイパリンクを含むサンプルテキストです。";
            // ハイパーリンクを作成します
             int pos = rtb.Text.IndexOf("hyperlink");
            rtb.Select(pos, 9);
            var uri = new Uri("https://developer.mescius.jp/", UriKind.Absolute);
            rtb.Selection.MakeHyperlink(uri);
            // ナビゲーション要求を処理します
            rtb.NavigationMode = C1.Xaml.RichTextBox.NavigationMode.Always;
            rtb.RequestNavigate += rtb_RequestNavigate;
        }
        private async void rtb_RequestNavigate(object sender, RequestNavigateEventArgs e)
        {
            var md = new MessageDialog("The document is requesting to navigate to " + e.Hyperlink.NavigateUri, "Navigate");
            md.Commands.Add(new UICommand("OK", (UICommandInvokedHandler) =>
            {
                Windows.System.Launcher.LaunchUriAsync(e.Hyperlink.NavigateUri);
            }));
            md.Commands.Add(new UICommand("Cancel", (UICommandInvokedHandler) =>
            {
                rtb.Select(e.Hyperlink.ContentStart.TextOffset, e.Hyperlink.ContentRange.Text.Length);
            }));
            await md.ShowAsync();
        }

C1RichTextBox.RequestNavigate ハンドラは、URI メンバを使用してコマンドと引数を解析します。このテクニックを使用すると、たとえば埋め込みメニューを含むドキュメントを作成できます。

CreateHyperlink メソッドは、ドキュメント内の既存の部分をハイパーリンクに簡単迅速に変更する方法にすぎません。C1Hyperlink 要素を C1Document オブジェクトに追加して、ハイパーリンクを作成することもできます。これについては、後のセクションで説明します。