Question

J'ai un RichTextBox WPF avec isReadOnly mis à True. Je voudrais les utilisateurs d'être en mesure de cliquer sur les liens contenus dans le RichTextBox, sans les avoir à maintenir enfoncée Ctrl .

L'événement Cliquez sur le lien ne semble pas tirer à moins que Ctrl est tenue vers le bas, donc je ne suis pas sûr de la façon de procéder.

Était-ce utile?

La solution 3

Nous avons réussi à trouver un moyen de contourner cela, à peu près par hasard.

Le contenu qui est chargé dans mon RichTextBox est juste stocké (ou en entrée) comme une chaîne simple. Je RichTextBox à sous-classé permettre la liaison contre sa propriété de document.

Qu'est-ce qui est pertinent à la question, est que j'ai une Convert IValueConverter () surcharge qui ressemble à ceci (code non essentiel à la solution a été dépouillé):

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;

Cela me obtient le comportement que je veux (bousculant des chaînes simples en RichTextBox et obtenir la mise en forme) et il en résulte aussi des liens qui se comportent comme un lien normal, plutôt que celui qui est incorporé dans un document Word.

Autres conseils

J'ai trouvé une solution. Set IsDocumentEnabled "True" et mis IsReadOnly "True".

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

Une fois que je l'ai fait, la souris se transformerait en une « main » quand je passe la souris sur un texte affiché dans une balise HyperLink. En cliquant, sans en détenir le contrôle se déclenche l'événement « Cliquez ».

J'utilise WPF de .NET 4. Je ne sais pas si les versions antérieures de .NET ne fonctionnent pas comme je décris ci-dessus.

JHubbard80 réponse de est une solution possible, il est la meilleure façon si vous n'avez pas besoin du contenu à choisir .

Cependant, je dois que: P est mon approche ici: définir un style pour les Hyperlinks à l'intérieur du RichTextBox. L'essentiel est d'utiliser un EventSetter pour faire les Hyperlinks traiter l'événement MouseLeftButtonDown.

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

Et dans codebehind:

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

Merci gcores pour le inspiaration.

Avez-vous essayé traiter l'événement MouseLeftButtonDown au lieu de l'événement Click?

J'ai changé EventSetter de la réponse de @ Hillin. MouseLeftButtonDown ne fonctionne pas dans mon code (framework .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());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top