2010-01-19 5 views
23

Grüße an wpf, 1 einen Text auf einer DB haben, und es ist wie folgt:Hyperlink hinzufügen WPF

Lorem ipsum Karotten, ökologische Tomatensuppe. Duis Region nisl, sollicitudin eu und der Köcher ac, tempor sed sapien. will Kinder aufrecht in einem Topf sitzen wird immer wichtig sein. Duis weich, manchmal als Minneapolis frei, massa tellus posuere nisi, feugiat elit tempus den Seen und es gab keinen Fußball. Anwesend als Bequemlichkeit. ** [ a href = 'http://somesite.com'] Einige Website [/ a] ** empfohlen, aber nicht viel Massen Fernsehen Geschichten und einen Salat. Ein Boot, und Ipsum oder Hass Autor

Meine Frage ist: Wie ein Hyperlink auf einem 1 TextBlock anzeigen kann? 1 will nicht ein WebBrowser-Steuerelement für diesen Zweck verwenden. 1 nicht wollen, um dieses Steuerelement verwenden entweder: http://www.codeproject.com/KB/WPF/htmltextblock.aspx auch

Antwort

13

Sie Regex mit einem Wertwandler in solchen Situationen verwenden können.

verwenden diese für Ihre Anforderungen (ursprüngliche Idee von here):

private Regex regex = 
     new Regex(@"\[a\s+href='(?<link>[^']+)'\](?<text>.*?)\[/a\]", 
     RegexOptions.Compiled); 

Dadurch werden alle Links in Ihrer Zeichenfolge enthält Links entsprechen, und machen 2 genannten Gruppen für jedes Spiel: link und text

jetzt können Sie alle Spiele durchlaufen. Jedes Spiel wird Ihnen eine

foreach (Match match in regex.Matches(stringContainingLinks)) 
    { 
     string link = match.Groups["link"].Value; 
     int link_start = match.Groups["link"].Index; 
     int link_end = match.Groups["link"].Index + link.Length; 

     string text = match.Groups["text"].Value; 
     int text_start = match.Groups["text"].Index; 
     int text_end = match.Groups["text"].Index + text.Length; 

     // do whatever you want with stringContainingLinks. 
     // In particular, remove whole `match` ie [a href='...']...[/a] 
     // and instead put HyperLink with `NavigateUri = link` and 
     // `Inlines.Add(text)` 
     // See the answer by Stanislav Kniazev for how to do this 
    } 

Hinweis: Verwendung dieser Logik in Ihrem benutzerdefinierten ConvertToHyperlinkedText Werteumwandler.

+0

Dies ist eine großartige Antwort, danke Mihir –

+0

Sie sind willkommen! [:)] – mg007

76

Anzeige ist ziemlich einfach, die Navigation eine andere Frage. XAML geht so:

<TextBlock Name="TextBlockWithHyperlink"> 
    Some text 
    <Hyperlink 
     NavigateUri="http://somesite.com" 
     RequestNavigate="Hyperlink_RequestNavigate"> 
     some site 
    </Hyperlink> 
    some more text 
</TextBlock> 

und die Event-Handler, die als Standard-Browser auf den Hyperlink zu navigieren startet wäre:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { 
    System.Diagnostics.Process.Start(e.Uri.ToString()); 
} 

Edit: Sie haben es mit dem Text aus der Datenbank tun Sie ‚ll den Text irgendwie analysieren müssen. Sobald Sie die Textteile und verlinkte Teil kennen, können Sie wpf Inhalte dynamisch im Code erstellen:

TextBlockWithHyperlink.Inlines.Clear(); 
TextBlockWithHyperlink.Inlines.Add("Some text "); 
Hyperlink hyperLink = new Hyperlink() { 
    NavigateUri = new Uri("http://somesite.com") 
}; 
hyperLink.Inlines.Add("some site"); 
hyperLink.RequestNavigate += Hyperlink_RequestNavigate; 
TextBlockWithHyperlink.Inlines.Add(hyperLink); 
TextBlockWithHyperlink.Inlines.Add(" Some more text"); 
+1

yes..but als 1 1 auf diesen Link geschrieben haben in einem Text enthalten, die in DB gespeichert ist. 1, dann möchte den Text lesen und entsprechende Hyperlinks hinzufügen, wenn –

+0

Stanislav Dank sehr klare Erklärung des Hyperlinks in WPF –

+0

Dank benötigt, dies funktionierte wunderbar! – BVB