Domanda

Ho un WPF RichTextBox con isReadOnly impostato True. Vorrei agli utenti di essere in grado di fare clic sui collegamenti presenti all'interno del RichTextBox, senza che debbano tenere premuto Ctrl .

L'evento Click sul collegamento ipertestuale non sembra sparare a meno che Ctrl è tenuto verso il basso, quindi sono sicuri di come procedere.

È stato utile?

Soluzione 3

è riuscito a trovare un modo per aggirare questo, più o meno per caso.

Il contenuto che è caricato nel mio RichTextBox è solo memorizzato (o immesso) come una stringa semplice. Ho sottoclasse RichTextBox per consentire vincolante nei suoi confronti della struttura del documento.

Qual è rilevante per la questione, è che ho un Convert IValueConverter () overload che sembra qualcosa di simile (codice non essenziale alla soluzione è stato spogliato out):

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;

Questo mi ottiene il comportamento che voglio (spintoni stringhe normale nel RichTextBox e la formattazione sempre) e si traduce anche in collegamenti che si comportano come un normale link, piuttosto che uno che è incorporato in un documento Word.

Altri suggerimenti

ho trovato una soluzione. Impostare IsDocumentEnabled su "True" e impostare IsReadOnly su "True".

<RichTextBox IsReadOnly="True" IsDocumentEnabled="True" />

Una volta che ho fatto questo, il mouse si trasformerebbe in una 'mano' quando mi passa il mouse sopra un testo visualizzato all'interno di un tag HyperLink. Cliccando senza holding di controllo scatterà il 'Click' evento.

io sto usando WPF da .NET 4. Non so se le versioni precedenti di .NET non funzionano come ho descritto sopra.

risposta

JHubbard80 s ' è una possibile soluzione, è il modo più semplice, se non è necessario il contenuto da selezionare .

Comunque ho bisogno che: P qui è il mio approccio: impostare uno stile per i Hyperlinks all'interno del RichTextBox. L'essenziale è quello di utilizzare un EventSetter per fare della movimentazione l'evento Hyperlink MouseLeftButtonDowns.

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

E in codebehind:

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

Grazie alla gcores per l'inspiaration.

Hai provato la gestione dell'evento MouseLeftButtonDown anziché l'evento Click?

Ho cambiato EventSetter da @ di hillin risposta. MouseLeftButtonDown non ha funzionato nel mio codice (NET Framework 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());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top