isReadOnly
を設定したWPF RichTextBoxをTrue
に設定しました。 RichTextBoxに含まれているHyperLinksをクリックすることができるようにユーザーにお願いします。Ctrlを押さなくてもいいです。CTRL-WPFを押さずにRichTextBoxでハイパーリンクをクリック
Ctrlが押されていない限り、HyperLinkのClickイベントが発生しないようですので、進める方法がわかりません。
isReadOnly
を設定したWPF RichTextBoxをTrue
に設定しました。 RichTextBoxに含まれているHyperLinksをクリックすることができるようにユーザーにお願いします。Ctrlを押さなくてもいいです。CTRL-WPFを押さずにRichTextBoxでハイパーリンクをクリック
Ctrlが押されていない限り、HyperLinkのClickイベントが発生しないようですので、進める方法がわかりません。
これを回避する方法は、偶然にもほとんどありませんでした。
RichTextBoxに読み込まれるコンテンツは、単純な文字列として保存(または入力)されます。 RichTextBoxをサブクラス化して、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;
これは私を取得RichTextBoxに平易な文字列を移動して書式を設定したいという振る舞いをして、Word文書に埋め込まれているリンクではなく、通常のリンクのように動作するリンクを生成します。
var textSplitはどのように作成されましたか? –
この回答には、最大upvotesが必要です。 –
Clickイベントの代わりにMouseLeftButtonDownイベントを処理しようとしましたか?
解決策が見つかりました。 IsDocumentEnabledを "True"に設定し、IsReadOnlyを "True"に設定します。
<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />
私はこれをしなかったら、私はハイパーリンクタグ内に表示されるテキストにカーソルを合わせると、マウスが「手」に変わるでしょう。コントロールを保持せずにクリックすると、 'Click'イベントが発生します。
私はWPFを.NET 4から使用しています。以前のバージョンの.NETが上記のように機能しないかどうかはわかりません。
これは、コピーアンドペーストの目的でテキストを選択できないようにするという、忘れられない副作用があります。 – Julien
JHubbard80の回答が可能ですが、コンテンツを選択する必要がない場合は、最も簡単な方法です。
しかし、私はそれが必要です:ここで私のアプローチです:RichTextBox
の内部にHyperlink
のスタイルを設定します。重要なのは、EventSetter
を使用してMouseLeftButtonDown
イベントを処理することです。
<RichTextBox>
<RichTextBox.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Cursor" Value="Hand" />
<EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
</Style>
</RichTextBox.Resources>
</RichTextBox>
そして、分離コードで:inspiarationためgcoresへ
private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
var hyperlink = (Hyperlink)sender;
Process.Start(hyperlink.NavigateUri.ToString());
}
感謝。
私は手を得ることはできませんが、何でも。それはうまく動作し、ハイパーリンクのナビゲーションコードにアクセスできます。ディレクトリが存在しない場合、私のアプリはクラッシュしません! – Darkhydro
クリックイベントを処理することができました。それはWindowsの10/WPF 4.5のものかもしれないが、それは働いた。ありがとう。 –
すでにSkeetに感謝していますか?非常にトリッキー! – Anthony
@Anthony、それは署名(スペルを見てください) – JaredPar
Hehehe、私は実際にジョンですが、Skeetが来たら、私は間違いなく彼に感謝します:) –