Ctrlキーを押さずにリッチテキストボックス内のハイパーリンクをクリックする - WPFは、

StackOverflow https://stackoverflow.com/questions/762271

質問

私はisReadOnlyに設定TrueとWPFのRichTextBoxを持っています。私は、ユーザーがそれらを Ctrlキー押したままにすることなく、リッチテキストボックス内に含まれるハイパーリンクをクリックできるようにしたいと思います。

ハイパーリンクをクリックしてイベントを発生していないようでない限り、 Ctrlキー開催ダウンがあるので、私は続行する方法がわからないんです。

役に立ちましたか?

解決 3

はかなり事故によって、これを回避する方法を見つけることができます。

私のリッチテキストボックスにロードされています内容は、単なる文字列として保存された(または入力)されます。私はそれのDocumentプロパティに対する結合を可能にするリッチテキストボックスをサブクラス化しています。

の質問に関連する何、私はこの(溶液への非必須コードが取り除かれている)のようになりますIValueConverterの変換()過負荷を持っているということです

FlowDocument doc = new FlowDocument();
Paragraph graph = new Paragraph();

Hyperlink textLink = new Hyperlink(new Run(textSplit));
textLink.NavigateUri = new Uri(textSplit);
textLink.RequestNavigate += 
  new System.Windows.Navigation.RequestNavigateEventHandler(navHandler);

graph.Inlines.Add(textLink);
graph.Inlines.Add(new Run(nonLinkStrings));

doc.Blocks.Add(graph);

return doc;

これは私が(リッチテキストボックスとなっフォーマットに無地の文字列を無理に勧め)必要な動作を取得し、それはまた、Word文書に埋め込まれています1のではなく、通常のリンクのように振る舞うのリンクになります。

他のヒント

私は解決策を見つけました。セットには、「真」にIsDocumentEnabledと「真」にIsReadOnlyの設定します。

<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />
私はこれをした後は、私はハイパーリンクタグ内に表示されるテキストにカーソルを合わせると、

、マウスは「手」に変わるでしょう。コントロールを保持せずにクリックすると、「クリック」イベントを発生させます。

私は上記のように、.NETの以前のバージョンが機能しない場合、私は知らない、.NET 4からWPFを使用しています。

JHubbard80 のの答えは可能な解決策であるあなたが選択するコンテンツを必要としない場合は、それが最も簡単な方法ですます。

Pは、ここに私のアプローチです:

しかし、私はそれを必要とするHyperlink内部RichTextBoxsのスタイルを設定します。不可欠ではEventSetterイベントを処理Hyperlinksを作るためにMouseLeftButtonDownを使用することです。

<RichTextBox>
    <RichTextBox.Resources>
        <Style TargetType="Hyperlink">
            <Setter Property="Cursor" Value="Hand" />
            <EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
        </Style>
    </RichTextBox.Resources>
</RichTextBox>

そして、分離コードでます:

private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
    var hyperlink = (Hyperlink)sender;
    Process.Start(hyperlink.NavigateUri.ToString());
}

inspiarationための gcores のおかげます。

は、あなたの代わりにClickイベントののMouseLeftButtonDownイベントを処理しようとしたことがありますか?

私は、@ hillinの答えからEventSetterを変更しました。 ののMouseLeftButtonDown の私のコード(.NETフレームワーク4.5.2)では動作しませんでした。

<EventSetter Event="RequestNavigate" Handler="Hyperlink_RequestNavigate" />
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
    Process.Start(e.Uri.ToString());
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top