Pregunta

Tengo un WPF RichTextBox con isReadOnly establecido en True. Me gustaría que los usuarios podrán hacer clic en hiperenlaces contenidos en el RichTextBox, sin que tengan que mantener pulsado Ctrl .

No parece que la evento Click en el hipervínculo para disparar a menos que Ctrl es mantenido hacia abajo, así que estoy seguro de cómo proceder.

¿Fue útil?

Solución 3

logrado encontrar una forma de evitar esto, más o menos por accidente.

El contenido que se carga en mi RichTextBox se acaba de almacenar (o introducida) como una cadena sencilla. He subclase RichTextBox para permitir la unión en contra de la propiedad de documento.

Lo que es relevante para la cuestión, es que tengo una IValueConverter Convert () de sobrecarga que se ve algo como esto (código que no sea esencial a la solución ha sido despojado a cabo):

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;

Esto me pone el comportamiento que quiero (empujando cuerdas normal en RichTextBox y el formato de conseguir) y también da lugar a enlaces que se comportan como un enlace normal, en lugar de uno que está incrustado en un documento de Word.

Otros consejos

he encontrado una solución. Conjunto IsDocumentEnabled a "True" y establece IsReadOnly en "True".

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

Una vez que hice esto, el ratón se convertirá en una 'mano' cuando se ciernen sobre un texto que se muestra dentro de una etiqueta de hipervínculo. Al hacer clic sin que sostiene el control se disparará el evento 'Click'.

Estoy usando WPF de .NET 4. No sé si las versiones anteriores de .NET no funcionan como lo describo arriba.

respuesta

JHubbard80 's es una posible solución, que es la forma más fácil si usted no necesita el contenido de ser seleccionado .

Sin embargo necesito que: P aquí está mi enfoque: establecer un estilo para los Hyperlinks dentro del RichTextBox. Lo esencial es utilizar un EventSetter para que los que manejan el caso Hyperlink MouseLeftButtonDowns.

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

Y en el código subyacente:

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

Gracias a gcores para la inspiaration.

¿Ha intentado controlar el evento MouseLeftButtonDown lugar del evento Click?

He cambiado EventSetter de la respuesta de @ Hillin. MouseLeftButtonDown no funcionó en mi código (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());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top