Usuário com melhor resposta
Componente de texto que identifique um link

Pergunta
-
Respostas
-
Tente isto:
void MainWindow_Loaded(object sender, RoutedEventArgs e) { FlowDocument flowDoc = new FlowDocument(); Paragraph paragrafo = new Paragraph(); Hyperlink textLink = new Hyperlink(new Run("http://www.futurainvestimentos.com.br")); textLink.NavigateUri = new Uri("http://www.futurainvestimentos.com.br"); textLink.RequestNavigate +=navHandler; paragrafo.Inlines.Add(textLink); flowDoc.Blocks.Add(paragrafo); rb.Document = flowDoc; } private void navHandler(object sender, RequestNavigateEventArgs e) { MessageBox.Show(e.Uri.AbsoluteUri); }
O seu RichTextBox tem que ter as propriedades IsReadOnly e IsDocumentEnabled setadas para true
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta Adriel CodecoModerator sexta-feira, 4 de março de 2011 04:21
Todas as Respostas
-
Cleidson,
Não sei se entendi direito sua dúvida, mas, o HyperLink do WPF tem um evento que é disparado quando o usuário clica no link... Portanto, se você tiver um RichTextBox que tenha um HyperLink dentro, é só assinar o evento Click dele para ter o mesmo resultado do LinkClicked do Windows Forms, não?
Veja o XAML abaixo (lembre-se que é só um exemplo hipotético):
<Window x:Class="WpfApplication1.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication1" Title="Window2" Height="300" Width="300"> <Grid> <RichTextBox IsDocumentEnabled="True"> <FlowDocument> <Paragraph> <TextBlock> <Hyperlink NavigateUri="http://www.terra.com.br" Click="Hyperlink_Click" RequestNavigate="Hyperlink_RequestNavigate">Click here</Hyperlink> </TextBlock> </Paragraph> </FlowDocument> </RichTextBox> </Grid> </Window>
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Olá..
Não..
A questão é a seguinte:
No Windows forms, eu passava um texto qualquer (desconhecido por mim, integração com a API do Twitter), daí esse evento que eu mencionei, do RichTextBox capturava os links existentes.
Preciso de algo semelhante..
Abs
-
Cleidson,
Você quer que, dado um RichTextBox já preenchido com algum texto, ao usuário clicar em qualquer um dos links desse texto, você seja notificado? Se sim, você pode adicionar um handler no RichTextBox, informando o evento Click da classe Hyperlink e um delegate... Dessa forma, toda vez que qualquer link dentro do seu RichTextBox for clicado, o evento será disparado... Seria algo como:
public Window2() { InitializeComponent(); meuRTB.AddHandler(Hyperlink.ClickEvent, new RoutedEventHandler(Hyperlink_Click)); } private void Hyperlink_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Hyperlink clicked"); }
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
-
Cleidson,
Não funcionou? Pode dar maiores detalhes? Testei aqui e funcionou... Você setou a propriedade IsDocumentEnabled do seu RichTextBox como true?
André Alves de Lima
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
André,
Segue como está meu codigo..
public winAlertaTwitter(Futura.PopTrade.Core.VO.Trade trade) : base(trade) { InitializeComponent(); rtbTwitter.AddHandler(Hyperlink.ClickEvent, new RoutedEventHandler(Hyperlink_Click)); } private void winAlertaTwitter_Loaded(object sender, RoutedEventArgs e) { lblTwitterFutura.Content = "@" + Futura.PopTrade.Core.BLL.Config.GetInstance().ObterChave("LOGIN_TWITTER"); //string link; //string documentText; //link = Futura.Commom.StringParser.stringBetween(TradeTwitter.Comentario + " ","http", " "); //documentText = "<html><head></head><body>"+ TradeTwitter.Comentario+"<a href='"+"http://"+link+"'"+" target='_blanck' >Acesse</a></body></html>"; //_wbo.WebBrowser.NavigateToString(documentText); FlowDocument flowDoc = new FlowDocument(); Paragraph paragrafo = new Paragraph(); paragrafo.Inlines.Add(new Run("Testando. http://www.futurainvestimentos.com.br")); flowDoc.Blocks.Add(paragrafo); rtbTwitter.Document = flowDoc; } <br/> private void Hyperlink_Click(object sender, RoutedEventArgs e)<br/> {<br/> MessageBox.Show("Hyperlink clicked");<br/> }
-
Tente isto:
void MainWindow_Loaded(object sender, RoutedEventArgs e) { FlowDocument flowDoc = new FlowDocument(); Paragraph paragrafo = new Paragraph(); Hyperlink textLink = new Hyperlink(new Run("http://www.futurainvestimentos.com.br")); textLink.NavigateUri = new Uri("http://www.futurainvestimentos.com.br"); textLink.RequestNavigate +=navHandler; paragrafo.Inlines.Add(textLink); flowDoc.Blocks.Add(paragrafo); rb.Document = flowDoc; } private void navHandler(object sender, RequestNavigateEventArgs e) { MessageBox.Show(e.Uri.AbsoluteUri); }
O seu RichTextBox tem que ter as propriedades IsReadOnly e IsDocumentEnabled setadas para true
Bruno
MVP Client Development - http://msmvps.com/blogs/bsonnino- Marcado como Resposta Adriel CodecoModerator sexta-feira, 4 de março de 2011 04:21