Durch Klicken auf Links in einem RichTextBox ohne CTRL gedrückt halten - WPF
-
11-09-2019 - |
Frage
Ich habe eine WPF RichTextBox mit isReadOnly
auf True
. Ich möchte Benutzer möchte in der Lage sein, auf HyperLinks im RichTextBox enthaltenen zu klicken, ohne sie halten Sie mit Strg .
Das Click-Ereignis auf den Hyper-Link scheint nicht zu schießen, es sei denn Strg ist statt nach unten, also bin ich nicht sicher, wie es weitergehen.
Lösung 3
Managed einen Weg, um dieses, ziemlich zufällig finden.
Der Inhalt, der in meine RichTextBox geladen werden wird nur gespeichert (oder eingegeben) als einfacher String. Ich habe die RichTextBox subclassed Bindung dagegen die Document-Eigenschaft zu ermöglichen.
Was die Frage relevant ist, ist, dass ich eine IValueConverter Convert () Überlastung, die etwa wie folgt aussieht (Code nicht wesentlich für die Lösung wurde gezupft):
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;
Das wird mir das Verhalten I (schiebend Ebene Strings in RichTextBox und bekommen Formatierung) wollen, und es ergibt sich auch Links, die wie ein normaler Link verhalten, sondern als eine, die in einem Word-Dokument eingebettet ist.
Andere Tipps
ich eine Lösung gefunden. Set IsDocumentEnabled auf "True" und setzt IsReadOnly auf "True".
<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />
Wenn ich das tat, schalten die Maus würde in eine ‚Hand‘, wenn ich über einen Text schweben innerhalb eines HyperLink-Tag angezeigt. Ein Klick, ohne die Kontrolle hält das ‚Click‘ Ereignis auslösen.
Ich bin mit WPF von .NET 4. Ich weiß nicht, ob frühere Versionen von .NET nicht funktionieren, wie ich oben beschrieben.
JHubbard80 's Antwort ist eine mögliche Lösung, es der einfachste Weg ist, wenn Sie ausgewählt nicht den Inhalt werden müssen, .
Allerdings muss ich, dass: P hier mein Ansatz ist: setzen Sie einen Stil für die Hyperlink
s innerhalb des RichTextBox
. Das Wesentliche ist eine EventSetter
zu verwenden, um die Hyperlink
s zu machen das MouseLeftButtonDown
Event-Handling.
<RichTextBox>
<RichTextBox.Resources>
<Style TargetType="Hyperlink">
<Setter Property="Cursor" Value="Hand" />
<EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />
</Style>
</RichTextBox.Resources>
</RichTextBox>
Und in Code-Behind:
private void Hyperlink_MouseLeftButtonDown(object sender, MouseEventArgs e)
{
var hyperlink = (Hyperlink)sender;
Process.Start(hyperlink.NavigateUri.ToString());
}
Dank gcores für die inspiaration.
Haben Sie versucht, das Mouseleftbuttondown Event-Handling statt des Click-Ereignis?
Ich änderte Eventsetter von @ Hillin Antwort. Mouseleftbuttondown hat in meinem Code (NET Framework 4.5.2) nicht funktionieren.
<EventSetter Event="RequestNavigate" Handler="Hyperlink_RequestNavigate" />
private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
Process.Start(e.Uri.ToString());
}