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.

War es hilfreich?

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 Hyperlinks innerhalb des RichTextBox. Das Wesentliche ist eine EventSetter zu verwenden, um die Hyperlinks 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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top